dlouhé volání metody getPersistentParams
- JajazXbm
- Člen | 29
- php 5.3.1
- nette 0.9.3-stable
Mám takový divný problém s nette. Jedna stránka se mi načítá
strašně dlouho. Hledal problém a měřil časy volání jednotlivých metod
až jsem se dostal k následujícímu výsledku se kterým si nevím rady a
prosím o pomoc. Ve třídě PresenterComponent
se v metodě
loadState
volá metoda getPersistentParams()
. Zkoušel
jsem měřit čas, který stráví php v této metodě a vyšlo mi, že čas je
cca 9 sekund. Měření:
$pp = $this->getReflection();
$a = microtime(true);
$pp->getPersistentParams();
echo microtime(true)-$a;
Podíval jsem se tedy dovnitř metody getPersistentParams
,
která je definována ve třídě PresenterComponentReflection
a
měřil čas běhu:
public function getPersistentParams($class = NULL)
{
$b = microtime(true);
.......
echo microtime(true) - $b;
return $params;
}
Na tomto místě mi vyšel čas běhu 0.3 sekundy. Tak co ten zbývající čas phpčko dělá?
Zkoumal jsem to ještě trochu dál a zjistil jsem, že pokud smažu cache RobotLoaderu, tak oba dva časy spadnou zhruba na 0.2 sekundy. Nicméně při dalším spuštění (s RobotLoader cache načtenou) se delší čas opět vrátí na 9 sekund. Opravdu nechápu kde by mohl být problém a rád bych pokud by mi někdo poradil.
- v6ak
- Člen | 206
$pp->getPersistentParams();
– kromě toho na tom řádku
není cokoli jiného? Tzn. výstup se pošle do kytek?
- Pokud ano, pak lze ještě podezřívat destruktor.
- Pokud ne, pak lze hledat ještě tady.
Doporučoval bych to přiřadit do lokální proměnné, to asi bude nejprůhlednější.
Dál, můžeš zkusit echo microtime(true), abys zjistil rozdíly mezi voláním funkce a začátkem jejího běhu apod.
Jinak v RobotLoaderu bylo AFAIK nedávno něco měněno, zkus si z GitHubu stáhnout aktuální vývojovou verzi.
BTW: Proč na jednom místě tu proměnnou pojmenováváš a a na druhém b?