Архив метки: Zend_Cache

Zend Framework: кеширование всего сайта с помощью Zend_Cache

Задача: минимизировать время загрузки сайта, используя кеширование.

Решение: использование Zend_Cache. Создаем папку ‘/application/data/cache’ с правами 776. В файле ‘/public/index.php’ после установки путей (функции set_include_path) пишем следующий код:

//// ======= caching code =============
//check if ajax, change GET request to make different cache
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
	($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {
   $_GET['request_type_'] = 'ajax';
}
require_once 'Zend/Cache.php';
$frontendOptions = array('lifetime' => 600,
                              'automatic_serialization' => true,
                              'debug_header' => false,
                                   'default_options' => array(
                                   'cache_with_cookie_variables'     => true, //кешировать даже если присутствуют куки
                                   'make_id_with_cookie_variables'     => false, //в генерации id кеша не использовать куки
                              )
                         );
$backendOptions = array('cache_dir' => APPLICATION_PATH . '/data/cache');

$cache = Zend_Cache::factory('Page',
                             'File',
                             $frontendOptions,
                             $backendOptions);

$cache->start();
//// ======= end caching code =============

И… всё! Наслаждаемся увеличением скорости обработки скриптов как минимум в двое. У меня скрипт главной страницы отрабатывал в среднем за 160 мс, теперь за 70 мс.

Что произошло?

Zend_Cache состоит из набора классов фронт-энда и бек-энда.

Фронт-энд отвечает за объекты кеширования, как-то: отдельные кусочки кода, возвращаемые значения функций, объекты, целые страницы. Мы как раз используем последний – Zend_Cache_Frontend_Page – он позволяет кешировать весь сайт, работает на основе ob_start() и ob_end().

Как могли заметить самые замечательные читатели, для фронт-энда мы задаем ряд параметров. Самые интересные касаются куки и описаны в коде. Сделано это потому, что на сайте кроме как для Google Analytics куки нигде не используются, поэтому нет смысла генерировать для каждого пользователя свой кеш. Конечно, если у вас на сайте будет контент, меняющийся в зависимости от залогиненого пользователя, то о таком кешировании стоит забыть или использовать более производительный бек-энд, а лучше подумать о кешировании на местах.

Бек-энды отвечают за место хранения кеша: просто файлы в папке, sqlite, memcache и многие другие. Мы используем самый простой, но всегда доступный бек-энд – хранение кеша в файлах (Zend_Cache_Backend_File).

Ссылки

  • Официальный ман по Zend_Cache – крайне полезный и доходчивый. Даю ссылку на русском языке, но, похоже, версия на английском более детальная.