Еще раз про Кэширование

Я вернусь к уже избитой теме про кэширование данных livestreet-ом, поскольку из комментов и вопросов замечаю явное непонимание используемых механизмов. Несмотря на уже существующий материал, за последние дни я уже столкнулся с несколькими случаями такого непонимания. В этом топике я расскажу про механизмы кэширования, где и как они используются, а именно про:
1. Реализуемый механизм кэширования.
2. Кэширование шаблонов Smarty.
3. Компрессию js и css-файлов, хотя напрямую к кэшированию и не относиться.


Реализуемый механизм кэширования
Что собой представляет кэширование вообще и зачем оно нужно? Кэширование представляет собой механизм снижения нагрузки на сервер за счет выдачи пользователю уже сформированного ранее результата. Если в общих чертах и на примере, то при пользовательском запросе страницы сначала проверяется есть ли уже сформированный результат и если да, то он отдается пользователю, а если нет, то livestreet выполняет свои скрипты и формирует необходимый результат, отправляет его пользователю и заодно кэширует. В случае если пользователь повторит запрос, то сервер уже не будет проводить работу по формированию результата, а просто отдаст ранее сформированный кэш.
Отсюда вывод: использовать кэширование только на рабочем сервере, на тестовом сервере, при разработке, кэширование не использовать, иначе изменений внесенных в скрипты Вы не увидите в отданном результате.
В LS используется Zend_Cache. Основным классом, реализующим работу с кэшированием, является ModuleCache, реализованный в «engine/module/cache/Cache.class.php», в этом файле много хороших комментариев – для полноты картины советую почитать. Для хранения КЭШа используются следующие средства: File, Memcache и XCache. Для работы с Memcache и XCache их наличие необходимо на Вашем сервере, поэтому перед использование убедитесь в их наличии на сервере.
Теперь Что включать и Как отключать.
Внимание! С настройками и очисткой КЭШа играть только на тестовом сервере!

Все настройки кэширования храняться в файле «config/config.php». Основным конфигурационным параметром, включающим и отключающим кэширование является: $config['sys']['cache']['use'], который содержит true или false в зависимости от того включать или нет кэширование; При отключенном кэшировании все остальные настройки кэширования не имеют силы.
Параметр $config['sys']['cache']['type'] определяет используюмую технологию кэширования и может иметь значения: file, memory, xcache. И еще раз — для работы с Memcache и XCache их наличие необходимо на Вашем сервере. Если их нет Вам остается вариант — File.
Здесь же, следующим параметром, устанавливается директория для КЭШа:
$config['sys']['cache']['dir']    = '___path.root.server___/tmp/';

Если Вы не используете кэширование, то в этой папке у Вас должен находиться только .htaccess. При смене скина или установке/удалении плагина могут возникать ошибки отображения страниц. Решаются они очисткой КЭШа.
Вывод: Если кэш не нужен, то ставим $config['sys']['cache']['use'] = false, очищаем папку tmp (оставив лишь .htaccess). Если нужен, то Читаем об используемых технологиях кэширования, выбираем необходимую, конфигурируем так как надо и используем. По умолчанию используется «file», если Memcache и XCache не установлены на сервере, используем его.

Кэширование шаблонов Smarty.
Шаблоны tpl сначала компилируются, а потом кэшируются. Кэш и скомпилированные шаблоны храняться в папках «templates/cache» и «templates/compiled» соответственно. Чем же отличается компилирование от кэширования. Файл tpl при компиляции преобразуется в исполняемый php-код, который, в свою очередь, и кэшируется. Кэш smarty отключен в эту папку выводиться лишь сжатые js и css. Компиляция шаблонов не отключается.
Вывод: Если Вы не видите результат изменения шаблона, то может быть отдается уже скомпилированный шаблон. Почистите templates/compiled.

Компрессия js и css-файлов
В файле конфигурации есть два параметра: $config['compress']['css']['merge'] и $config['compress']['js']['merge'], которые определяют объединение файлов файлы js и css в один, если файлы объединяются, то они и кэшируются в каталог, определенный в $config['path']['smarty']['cache'].
Вывод: Если Вы изменили стили или скрипты, но не видите результатов, очистите папку «templates/cache» или отключите сжатие и очистите эту же папку.

9 комментариев

avatar
что эффективнее — File, Memcache или XCache.?
avatar
Споры не угасают. Где-то читал, что у фэйсбука был memcache, потом они перешли на что-то другое. Для File не нужно дополнительно устанавливать на сервер что-либо. Про XCache тоже много хороших отзывов. Читайте сравнительные анализы и выбирайте лучшее под конкретный проект.
avatar
Memcache эффективен, когда у тебя есть много отдельных серверов. В противном случае, что мешает смонтировать в ОЗУ папку кеша. А так у тебя создается сокет и доп подключение, что немного замедляет.
avatar
Мемкеш очень эффективен и на отдельном сервере, ускорение огромное по сравнению с файловым кешем. Накладные расходы минимальны.
avatar
Имле в виду отдельные сервера для кеша.
avatar
Грамотно и толково написано. Приятно читать.
  • aex
  • 0
avatar
Очень помогла статья
avatar
а как проверить работает ли у тебя memcached? установили его, вроде все прописали в конфигах? как увидеть результат? есть ли скрипты, которые наглядно показывают его работу?
avatar
Скажите, пожалуйста: если кэширование отключено, папки tpl и templates/cache вычищены, но сайт продолжает брать сильно устаревшие шаблоны, а сейчас и вовсе настройки с локального сервера (после выгрузки данных с локали на внешний сервер пытается загрузить по локальному адресу класс Engine.class.php), то где еще надо посмотреть?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.