ifCurrent trvá 4 vteřiny na localhostu
- KEnik
- Člen | 10
Zdravím,
nevím proč ale když mám v šabloně macro ifCurrent
<li {ifCurrent 'FeedLimiter:*'}class="active"{/ifCurrent}><a n:href="FeedLimiter:default">Kategorie do feedů</a></li>
tak to na localhostu trvá 4 vteřiny pro každou podmínku
Navíc pro muj nový presenter route:
<?php
$router[] = new Route('<presenter>/<action>[/<id>]', 'FeedLimiter:default');
?>
se zasekne práve u macra ifCurrent vykreslování šablony
` „name“: „nette/application“,
„version“: „v2.2.2“,`
`PHP 5.5.9–1ubuntu4.12 (cli) (built: Aug 13 2015 22:34:42)
Copyright © 1997–2014 The PHP Group
Zend Engine v2.5.0, Copyright © 1998–2014 Zend Technologies
with Xdebug v2.2.3, Copyright © 2002–2013, by Derick Rethans
with Zend OPcache v7.0.3, Copyright © 1999–2014, by Zend Technologies`
- amik
- Člen | 118
Ahoj,
ifCurrent interně volá Presenter::createRequest() a ten může být pomalý,
když máš na stránce hodně komponent, protože z nich musí posbírat
parametry pro request (loni o tom mluvil myslím Honza Tvrdík na poslední
sobotě).
Můžeš zkusit na začátku vykreslení šablony zavolat
Presenter::saveGlobalState() (po tomto volání se už do generovaných odkazů
nepropíší další změny v persistentních atributech, ty by ale už
v šabloně stejně neměly nastávat a generování odkazů bude o dost
rychlejší). Renderování šablony presenteru se alevolá až při
generování výstupu, tj. potom, co se tato metoda interně zavolá, takže by
ti to pomohlo leda v případě, že tuto šablonu renderuješ někdy dřív
ručně.
Jinak bych zkusil do Presenter::createRequest() naházet pár debug řádků
($time = microtime(TRUE)
na začátek a v kódu si pak párkrát
vypsat microtime(TRUE) – $time) a zjistit, kde přesně problém vzniká.
- David Grudl
- Nette Core | 8239
Chjo, Honza Tvrdík tady zasel nehezký FUD :-/ Na to s tím
saveGlobalState
úplně zapomeňte, nevolejte to, ničemu to
nepomůže, naopak tím můžete rozhodit životní cyklus presenteru. Nette to
volá automaticky ve správnou chvíli.
Že to trvá tak dlouho je skutečně záhada, se kterou ti asi nikdo nepomůže a bude to chtít prozkoumat.