Oznámení
velmi pomale Dibi: profile=True
před 8 lety
- vitas
- Člen | 6
Při zapnuti profileru (profile=True
) u mě dochází při
inicializaci k velkému zpomaleni (dotaz na straku kolem 2.7s přes localhost).
Postupným vkládáním ladících hlášek jsem dosel k tomu, že problém je
ve volání is_callable('Nette\Debug::addPanel')
v konstruktoru
DibiProfiler
, přitom Nette\Debug::addPanel
neexistuje:
Po přepsání podmínky, tak aby jako první testovala tu správnou verzi, je dotaz přiměřeně rychlý (~100ms), ale asi to není čisté řešení.
class DibiProfiler extends DibiObject implements IDibiProfiler, IDebugPanel
{
public function __construct(array $config)
{
echo "in profiler:", NDebug::timer(), "\n";
if (is_callable('Nette\Debug::addPanel')) {
echo "bf 1 addpannel :", NDebug::timer(), "\n";
call_user_func('Nette\Debug::addPanel', $this);
echo "af 1 addpannel :", NDebug::timer(), "\n";
} elseif (is_callable('NDebug::addPanel')) {
echo "bf 2 addpannel :", NDebug::timer(), "\n";
NDebug::addPanel($this);
echo "af 2 addpannel :", NDebug::timer(), "\n";
} elseif (is_callable('Debug::addPanel')) {
echo "bf 3 addpannel :", NDebug::timer(), "\n";
Debug::addPanel($this);
echo "af 3 addpannel :", NDebug::timer(), "\n";
}
echo "af addpannel :", NDebug::timer(), "\n";
Výstup:
in profiler:2.0980834960938E-5
bf 2 addpannel :2.7260780334473
af 2 addpannel :2.3126602172852E-5
af addpannel :1.2874603271484E-5
bf setfile :2.0027160644531E-5
af setfile :1.1920928955078E-5
af seffilter :1.215934753418E-5
end __construct :1.0967254638672E-5
Ještě verze:
PHP 5.3.3-1ubuntu9.3
Dibi: VERSION = '1.5-rc1',REVISION = 'acda14c released on 2011-02-17'
Nette: VERSION = '2.0-dev'; REVISION = '9f535f9 released on 2011-01-10';
před 8 lety
- vitas
- Člen | 6
Aha, tak velmi pravděpodobně je to tím, že používám
RobotLoader.php
s autoRebuild=True
, při každém
dotazu na neexistující třídu se přebuildí index. Vzhledem k tomu, že
používám i masitou knihovnu mpdf
, redindexace zabere asi
opravdu hodně.
Teď tedy nevím jeli to vůbec bug, a jak by se to mělo řešit správně.
před 8 lety
- David Grudl
- Nette Core | 6806
RobotLoader by se takto chovat neměl, měl by si pamatovat i neexistující třídy. Zkus tam dát poslední verzi Nette.