tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

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.