Доктрина ленивой загрузки классов занимает 100 мс? - PullRequest
1 голос
/ 10 апреля 2010

Я лениво загружаю свои классы Доктрины на моем сайте. Сравнительный анализ показал, что для завершения 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

Ответы [ 2 ]

5 голосов
/ 10 апреля 2010

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

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

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

0 голосов
/ 21 октября 2010

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

...