RobotLoader rebuilduje v Development Mode pri praci s Annotations

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

Nette rev.: cbd1f6566a87d03fe58799c6363dcd5334b8582b

Zdravim.

Pracujem na aplikacii, ktora vyuziva Doctrine2 a bol som sice prekvapeny render casmi jednotlivych stranok a dlho som to prikladal prave Doctrine. Ale po dnesnom profilovani som dosiel na jadro problemu. Nie som si isty, ci to je bug, ale asi to nie je uplne cielene chovanie.

RobotLoader nastavujem cez config.ini, teda autoRebuild sa nastavuje podla modu, kedze som v Development, tak autoRebuild je TRUE. Pri praci s annotations (uz len nastartovanie session v Application) vsak RobotLoader rebuilduje svoj list pri kazdom requeste, lebo:

  1. AnnotationsParser pre kazdy najdeny annotation token (v mojom pripade to su napriklad: property, serializationVersion, author, copyright, package, final, var) sklada class „$name.Annotation“ a ten dohladava, ci existuje → source
  2. Toto vedie ku vyvolaniu RobotLoader::tryLoad($type) a kedze samozrejme takyto class neexistuje (napriklad serializationVersionAnnotation) a v DevelopmentMode je $autoRebuild TRUE, dochadza ku rebuildovaniu RobotLoadera, co v mojom pripade je priblizne 400ms navyse pri kazdom hite → source

Toz ako, bug ci feature ? A ak feature, preco ? :)

https://github.com/…nsParser.php#L179

David Grudl
Nette Core | 8139
+
0
-

K rebuildování má dojít jen jednou, viz zdroják (if (!$this->rebuilt) { $this->rebuild(); }). Nejsem schopen chybu nasimulovat.

Jan Tvrdík
Nette guru | 2595
+
0
-

Zkoušel jsi nastavit RobotLoader::$rememberMissing na TRUE?

edke
Člen | 198
+
0
-

David Grudl wrote:

K rebuildování má dojít jen jednou, viz zdroják (if (!$this->rebuilt) { $this->rebuild(); }). Nejsem schopen chybu nasimulovat.

No ano, samozrejme ze ma k rebuildu dojst len raz, a to aj dojde. Ale k rebuildu dojde zakazdym, pri kazdom jednom requeste. A to len preto, ze sa dohladava class, ktory neexistuje a neviem ani preco by mal existovat (napriklad @author, teda AuthorAnnotation, alebo @copyright, teda CopyrightAnnotation atd. ).

edke
Člen | 198
+
0
-

Jan Tvrdík wrote:

Zkoušel jsi nastavit RobotLoader::$rememberMissing na TRUE?

Co robi $rememberMissing ?

David Grudl
Nette Core | 8139
+
0
-

Už tomu rozumím, skutečně to dělá $rememberMissing (který jsem tam nedávno přidal), asi to odstraním.

edke
Člen | 198
+
0
-

David Grudl wrote:

Už tomu rozumím, skutečně to dělá $rememberMissing, asi to odstraním.

Ja som ale s $rememberMissing nic nerobil, nechaval som povodnu hodnotu, aka sa vytvara pri Configurator::createRobotLoader, teda nechava sa povodna a to FALSE.

edke
Člen | 198
+
0
-

David Grudl wrote:

Už tomu rozumím, skutečně to dělá $rememberMissing (který jsem tam nedávno přidal), asi to odstraním.

Vyzera ze ecc11dfadc701645972cdcbc5986c0e104a3dd7a ukazal RobotLoader-u, ako sa ma spravne chovat, aj s Annotations :) Vdaka.