Классы ленивой загрузки Doctrine занимают 100 мс?

Я ленюсь загружать свои классы Doctrine на свой веб-сайт. Тестирование показало, что Doctrine::loadModels('models') выполняется более 100 мс! Всего у меня 118 таблиц, но все же...

установка атрибута на консервативную загрузку:

Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_CONSERVATIVE);

запуск тестовой части:

$CI->benchmark->mark('Doctrineload_start');
Doctrine::loadModels(APPPATH.'models');
$CI->benchmark->mark('Doctrineload_end');

И результат:

Doctrineload    0.1085 (seconds)

Это "нормально"?

«контекст»:

Loading Time Base Classes   0.0233
Doctrineinit    0.0435  //doctrine_pi.php file, doctrine configuration + db account
Doctrineload    0.1085
Masterpageset   0.0001
Userload    0.1208 //1 db query
Masterpageaddcontent    0.1565 //1 db query, loading view with some <?=?> php parsing
Masterpageshow      0.0203 //loading view
Controller Execution Time ( Home / Index )      0.3591
Total Execution Time    0.3826

person Ropstah    schedule 09.04.2010    source источник


Ответы (2)


Используете ли вы систему кэширования кодов операций, такую ​​как APC или xcache? Если нет, вам следует рассмотреть возможность его установки. Вы увидите значительное улучшение при использовании более крупных фреймворков и библиотек, таких как Doctrine. PHP тратит нетривиальное количество времени на каждый запрос, перекомпилируя все файлы, необходимые для генерации ответа. Использование кэша кода операции значительно уменьшит эти накладные расходы.

Планируется, что в конечном итоге APC будет включен в PHP, если его сопровождающим будет сам Расмус Лердорф, и, похоже, это очень популярная система. См.: http://pecl.php.net/package/APC.

XCache был написан создателем lighttpd, и это кажется довольно жизнеспособным вариантом, хотя я давно им не пользовался. См.: http://xcache.lighttpd.net/.

person awgy    schedule 10.04.2010
comment
Нет, пока не используем. Я знаю, что в Doctrine есть встроенная функция компиляции. Я собираюсь попробовать это. Спасибо! - person Ropstah; 10.04.2010
comment
В качестве дополнения: вы уже установили систему кэширования? Если да, то были ли у вас какие-либо улучшения? - person Sebastián Grignoli; 28.09.2010

Имейте в виду, что компиляция Doctrine просто дает вам более компактную версию исходных php-файлов, что сокращает время, необходимое интерпретатору PHP для разбора исходного кода. Он не транслируется в байт-код. Таким образом, кэш байт-кода по-прежнему будет иметь большое значение.

person webgr    schedule 21.10.2010