Čas:17.8.2010 9:31:28
Od:Ondrej Medek
Předmět:Predcasna optimalizace volani funkce
Velmi casto programatori generuji neefektivni kod typu public void doSomething() { for (Prvek prvek : seznam) { if (prvek.getValue() > seznam.getMax().getValue()) { ... } } } , kde seznam.getMax() pokazde prochazi seznam a hleda maximum. Kdo ma potom provadet optimalizaci: autor doSomething(), ze si pred cyklem zapamatuje max, nebo autor getMax() u seznamu, ze si bude kesovat maximum, pokud se seznam nemeni? BTW. Pravidlo 2. "Používejte osvědčené frameworky. Frameworky jsou obvykle napsány experty v daném oboru a měly by být prosty výkonnostních neefektivností." Dnes uz narozdil od roku 1975 neplati, bohuzel.
Čas:17.8.2010 10:17:49
Od:Zdenek Tronicek
Předmět:Re: Predcasna optimalizace volani funkce
Tady je podle meho nazoru spravne pouzit lokalni promennou a do ni si pred cyklem ulozit hodnotu maxima. To bude i srozumitelnejsi, protoze jinak si ctenar musi polozit otazku, proc se hleda maximum v seznamu opakovane. Jinak pokud se seznam nemeni, muze si seznam maximum zapamatovat a podruhe ho nehledat. Nicmene tato optimalizace by mela zustat pod poklickou (byt neviditelna vne seznamu) a i kdyz seznam neco takoveho dela, mel by programator z duvodu srozumitelnosti ve vyse uvedenem priklade pouzit lokalni promennou max.
Čas:18.8.2010 10:17:37
Od:Kamil Podlešák
Předmět:Re: Predcasna optimalizace volani funkce
Odstranění zbytečně neefektivního algoritmui tj. O(N) místo O(N^2), rozhodně nemůže být považována za předčasnou optimalizaci.
Čas:21.11.2010 18:32:39
Od:Lama
Předmět:Nesouhlas
Pravidlo "nedělej předčasnou optimalizaci" je podle mě natolik obecné, až je kontraproduktivní. Měla by se naopak zdůraznit potřeba vidění širšího kontextu každým vývojářem - např. lokální vs. vzdálené volání, předpokládaná průměrná a maximální zátěž modulu, dostupná paměť, počet záznamů v reálné produkční databázi za 3 roky provozu, jaká doba odezvy systému je ještě přijatelná pro business, apod. a teprve na základě toho odvozovat, co optimalizovat a co ne. Věřte, že problematických aplikací, kde se tvůrci vyhnuli "optimalizaci" (čili zanedbali design), jsem viděl docela dost.
Čas:24.11.2010 20:36:12
Od:Zdeněk Troníček
Předmět:Re: Nesouhlas
Lokální vs. vzdálené volání je věc architektury aplikace. Optimalizovat podle předpokládané průměrné a maximální zátěže modulu jde podle mého názoru těžko. Pokud jde o další věci (dostupná paměť, počet záznamů v reálné produkční databázi za 3 roky provozu, jaká doba odezvy systému je ještě přijatelná pro business), tak ty se zohlední při profilování, protože profilování aplikace by mělo samozřejmě probíhat v reálných podmínkách. Proč dáváte rovnítko mezi vyhnout se optimalizaci a zanedbat design nemám tušení.
Diskuzní příspěvky
Ondrej Medek Predcasna optimalizace volani funkce
Zdenek Tronicek   Re: Predcasna optimalizace volani funkce
Kamil Podlešák   Re: Predcasna optimalizace volani funkce
Lama Nesouhlas
Zdeněk Troníček   Re: Nesouhlas