is_callable() Terribly slow (700×) . souvislost s RobotLoaderem?
- bojovyletoun
- Člen | 667
Ahoj, narazil jsem na takový problém ohledně rychlosti
is_callable. Testováno na C2D T8300 @**1047.31
MHz, Apache 2 modul, PHP 5.3.5, Nette NS 2011–01–0×. Normálně
trvá funkce 6ms – značeno OK, v pomalém případě
**4000ms – SLOW
Podmínky chyby:
- pokud volám is_callable před
Environment::getRobotLoader();
, tak problém není nikdy is_callable("Nette\Debug::addPanel")
true, OKis_callable("Gadzo\Debug::addPanel")
false, SLOWis_callable("Debug::addPanel")
false, SLOWis_callable("Nette\Application\Presenter")
, false, OKis_callable(callback("Debug","addPanel"))
, true, OKis_callable(callback("Debug::addPanel"))
, true, OK
.
Je mi divné, co dělá RobotLoader. Pak proč is_callable nebere v úvahu NS,
ale callback() ano.
PS: profiler funguje.
EDITED: měl jsem starou verzi dibi , kde bylo is_callable(Debug:addpanel), stáhl jsem si aktuální a tam je to opravené( projevovalo se to při zapnutém profileru).
Editoval bojovyletoun (10. 1. 2011 17:23)
- Filip Procházka
- Moderator | 4668
Když uvážíš, že is_callable
ti spustí načtení třídy
robot loaderem, je logické, že to bude trvat trochu pomaleji, než prosté
zavolání již načtené třídy :) ale 4 sekundy je opravdu hodně
Editoval HosipLan (11. 1. 2011 0:50)
- David Grudl
- Nette Core | 8228
Každopádně autorebuild by se měl vyvolat jen jednou, další volání stejného is_callable ho volat nemá.