Oto Buchta napsal(a): >> "We should forget about small efficiencies, say about 97% of the time: >> premature optimization is the root of all evil." > > Prestoze je tento citat o necem malinko jinem, presto s nim > nesouhlasim. Presto si samozrejme mnoho z vas spolu s Cimrmanem rekne: > "Je mozne, ze se vam to nelibi, muzete s tim dokonce i nesouhlasit, > ale to je to jedine, co s tim muzete udelat." > > Pokud to totiz clovek zabali hned po zjisteni vysledku, nemuze se > nikdy dobrat neceho lepsiho. Ono totiz dopredu vedet, ze se souhrn > vsech optimalizaci nedosahne lepsich vysledku nez tri procent, je > nesmysl.
Ne zcela doslovny preklad: "Zhruba v 97% pripadu bychom meli zapomenout na male vykonnostni optimalizace: predcasna optimalizace je puvodem vseho zla." Od roku 1974 se vsak svet programovani zmenil a zatimco pred 30 lety bylo mozne odhadnout, jake instrukce procesor provede (pro dany program v C), dnes je (pro program v Jave) takovy odhad mnohem slozitejsi. Souvisi to s tim, ze JIT provadi spoustu optimalizaci, ktere jsou casto rizeny heuristikami. Navic se tyto optimalizace meni s kazdym buildem JDK (napr. JDK 1.6.0_12 a 1.6.0_13 mohou byt v tomto smeru velmi rozdilne). Takze kdyz se nekomu podari "mikrooptimalizace" typu "prochazeni pole odzadu je rychlejsi", v dalsim buildu JDK uz to nemusi fungovat. A protoze JIT je psan tak, aby umel optimalizovat hlavne "hloupy" kod, je lepsi psat "hloupy" kod a nechat optimalizaci na JITu. (Brian Goetz: "Write dumb code"). ("Hloupy" kod oznacuje kod bez vykonnostnich vychytavek, ne neco hloupeho :). Aktualizace zmineneho citatu pro soucasnost by mohla znit: v 99.9% pripadu zapomente na drobne optimalizace. Nikdy neoptimalizujte na zaklade odhadu. Pokud chcete (ci potrebujete) optimalizovat, zmerte vykonnost pred optimalizaci i po ni a pouze pokud se optimalizace ukaze jako ucinna, tak ji pouzijte. A dalo by se i pokracovat, napr.: s optimalizacemi vzdy zacnete tam, kde program travi nejvice casu. Z.T. -- Zdenek Tronicek FIT CTU in Prague