Prilisna slozitost FormContainer::setValues + ::getValues

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
juzna.cz
Člen | 248
+
0
-

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?

juzna.cz
Člen | 248
+
0
-

Zkusil jsem napsat patch a krasne mi funguje. Co vy na to?

Jan Tvrdík
Nette guru | 2595
+
0
-

Předpokládám, že se jednalo o výkonovou optimalizaci. Zkoušel jsi to změřit?

juzna.cz
Člen | 248
+
0
-

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)

Patrik Votoček
Člen | 2221
+
0
-

a paměť?

juzna.cz
Člen | 248
+
0
-

Spotreba pameti je uplne stejna (v mem test case si obe implementace vezmou 37MB)

David Grudl
Nette Core | 8228
+
0
-

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í.

juzna.cz
Člen | 248
+
0
-

Tak v tom pripade tedy prosim o merge

David Grudl
Nette Core | 8228
+
0
-

Říkám si, že podporu pro jiné kontainery bych asi vyhodil, tj. tyto řádky https://github.com/…4e2b07c17c68#…

juzna.cz
Člen | 248
+
0
-

Tot otazka, nechtel jsem do toho zasahovat protoze si nejsem jisty, jak a zda se to pouziva. Ja jsem to teda nikdy driv nepouzil a na tuto moznost jsem narazil az pri psani tohoto patche.