Prilisna slozitost FormContainer::setValues + ::getValues
- juzna.cz
- Člen | 248
Studoval jsem tyto dve funkce docela dlouho, abych pochopil jak funguji (link) a ta implementace je docela drsna! Je nejaky duvod, proc je to takto slozite udelane? Proc to neni treba rekurzivne, treba takto ?
Rekurzivni verze mi prijde o mnoho srozumitelnejsi. Je tam neco, co nevidim? Nebo se jedna o nejakou vykonovou optimalizaci?
- Jan Tvrdík
- Nette guru | 2595
Předpokládám, že se jednalo o výkonovou optimalizaci. Zkoušel jsi to změřit?
- juzna.cz
- Člen | 248
Zkusil jsem udelat test case s obrovskym mnozstvim vnorenych formularu a prvku, kde jsem vychazel z tests/Forms/Forms.namingContainer.001.phpt.
Moje implementace: 12.5 sekundy
Originalni implementace: 13.0 sekundy
Tam tedy rozdil prakticky neni
Edit: muj test je zde
Editoval juzna.cz (19. 3. 2011 15:11)
- David Grudl
- Nette Core | 8228
To je z historických důvodů, kdy místo
if ($control instanceof FormContainer)
tam bylo
if ($control instanceof INamingContainer)
, tj. objekt, který
neměl setValues(). Tohle to už dnes neplatí, takže by šlo použít
rekurzivní volání.
- David Grudl
- Nette Core | 8228
Říkám si, že podporu pro jiné kontainery bych asi vyhodil, tj. tyto řádky https://github.com/…4e2b07c17c68#…