dlouhé volání metody getPersistentParams

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
JajazXbm
Člen | 29
+
0
-
  • 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
+
0
-

$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?