Настал момент, когда самописный проект на ZF под нагрузкой начал сбоить. И как обычно - RTFM. наткнулся на инересную статейку. Ну и дело стало за малым - реализовать на проекте. В первую очередь полез в стартовый скрипт bootstrap.php и поправил set_include_path вместо относительных путей для подключения библиотек на абсолютные :
set_include_path('.'
. PATH_SEPARATOR . realpath(dirname(__FILE__) . '/../library')
. PATH_SEPARATOR . realpath(dirname(__FILE__) . '/../application/default/models')
. PATH_SEPARATOR . realpath(dirname(__FILE__) . '/../../zf-1.9.4/library')
. PATH_SEPARATOR . get_include_path());
Как и написано в мануале - подключил файлик с инклюдами(там прописываются все необходимые инклюды, для ускорения загрузки классов/библиотек:
$classFileIncCache = realpath(dirname(__FILE__) . '/../cache') . '/pluginLoaderCache.php';
if (file_exists($classFileIncCache)) {
include_once $classFileIncCache;
}
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
Zend_Loader_PluginLoader::setIncludeFileCache($classFileIncCache);
Далее лезем в файл инициализации Initializer.php. В нем прописываем кэш для БД -(по дефолту при создании модели таблицы происходит запрос describe table, который можно записать в кэш):
$cache = Zend_Cache::factory('Core',
'File',
array(
'lifetime' => null,
'automatic_serialization' => true,
'ignore_user_abort' => true
),
array(
'cache_dir' => '/path/to/cache/',
'cache_file_umask' => '0666')
);
Zend_Db_Table::setDefaultMetadataCache($cache);
Можно так же использовать кэш не в файлах, а в хранилище Memcached что еще увеличит скорость работы.
Еще одним узким местом оказались файлы с настройками, которые хранились в формате XML - очень удобно для правки. Конфигурация кэшировалась при помощи того же Zend_Cache. Прочтя статейку на хабре, в результатах сравнения видно, что для небольших конфигурационных файлов сериализованный конфиг работает ненамного быстрее Ini, на значительно шустрее чем XML в результате чего было принято решение отказаться от конфигурационных файлов в XML+FileCache в пользу Ini файлов.
set_include_path('.'
. PATH_SEPARATOR . realpath(dirname(__FILE__) . '/../library')
. PATH_SEPARATOR . realpath(dirname(__FILE__) . '/../application/default/models')
. PATH_SEPARATOR . realpath(dirname(__FILE__) . '/../../zf-1.9.4/library')
. PATH_SEPARATOR . get_include_path());
Как и написано в мануале - подключил файлик с инклюдами(там прописываются все необходимые инклюды, для ускорения загрузки классов/библиотек:
$classFileIncCache = realpath(dirname(__FILE__) . '/../cache') . '/pluginLoaderCache.php';
if (file_exists($classFileIncCache)) {
include_once $classFileIncCache;
}
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
Zend_Loader_PluginLoader::setIncludeFileCache($classFileIncCache);
Далее лезем в файл инициализации Initializer.php. В нем прописываем кэш для БД -(по дефолту при создании модели таблицы происходит запрос describe table, который можно записать в кэш):
$cache = Zend_Cache::factory('Core',
'File',
array(
'lifetime' => null,
'automatic_serialization' => true,
'ignore_user_abort' => true
),
array(
'cache_dir' => '/path/to/cache/',
'cache_file_umask' => '0666')
);
Zend_Db_Table::setDefaultMetadataCache($cache);
Можно так же использовать кэш не в файлах, а в хранилище Memcached что еще увеличит скорость работы.
Еще одним узким местом оказались файлы с настройками, которые хранились в формате XML - очень удобно для правки. Конфигурация кэшировалась при помощи того же Zend_Cache. Прочтя статейку на хабре, в результатах сравнения видно, что для небольших конфигурационных файлов сериализованный конфиг работает ненамного быстрее Ini, на значительно шустрее чем XML в результате чего было принято решение отказаться от конфигурационных файлов в XML+FileCache в пользу Ini файлов.