Кэширование данных позволяет ускорить загрузку сайта и снизить нагрузку на сервер базы данных. В глобальных настройках Joomla для управления кэшем присутствуют 3 параметра: включение механизма кэширования, директория для хранения файлов кэша и время жизни кэша. В данной статье описывается общий принцип работы механизма кэширования и приведены фрагменты одной из тем нашего форума, посвященной вопросу выбора оптимального времени жизни кэша.
Принцип работы механизма кэширования
При первом обращании к материалу или, допустим, к модулю происходит сохранение выбранных данных в файлах, размещенных в директории cache. Механизм генерации имен файлов гарантирует, что они никогда не пересекутся с существующими, а содержимое этих файлов, помимо закэшированных данных объекта, содержит еще дополнительную уникальную информацию о закэшированном объекте.
При последующих обращениях, менеджер кэша Joomla проверяет, существует ли в кэше объект с заданными параметрами (в том числе названием, содержимым, датой создания, модификации т.д.), если нет — значит материал изменялся или же, просто еще ни разу не кэшировался. Если для запрашиваемого объекта отсутствуют данные в кэше, то перед отображением объекта пользователю эти данные будут помещены в кэш. А если закэшированные данные есть, то вот в этом случае происходит проверка времени кэширования: если дата и время создания кэша отличаются от текущего на интервал больший, чем время жизни кэша, установленное в параметрах конфигурации, то объект будет закэширован заново.
Преимущества длительного кэширования
По умолчанию, время жизни кэша равно 900 секунд или 15 минут. Это означает, что, даже при отсутствии изменений на сайте, каждые 15 минут кэш будет пересоздаваться, а значит будут выполняться и лишние запросы к базе данных. Увеличение времени жизни кэша позволяет менеджеру кэша дольше использовать закэшированные данные, тем самым еще больше снижая общее количество запросов к базе данных.
На мой взгляд, оптимальным временем жизни кэша является интервал обновления сайта: если вы добавляете новости не чаще, чем раз в сутки, а на добавление новостей, допустим, у вас уходит 1 час, то время жизни кэша можно смело ставить 82800 секунд (23 часа).
Недостатки длительного кэширования
Как известно, с помощью мамботов можно производить манипуляции с текстом материалов, не внося реальных изменений в текст. Например, выделять какие-то слова или термины, заменять ссылки или прятать фрагменты текста. Так вот, если у нас включен кэш, и время жизни выставлено большое, то установив и опубликовав какой-нибудь новый мамбот, Вы можете не увидеть изменений, потому что Joomla будет по-прежнему отображать данные из кэша.
Так как при любом изменении объекта (материала, модуля и т.д.) происходит перегенерация кэша этого объекта, то независимо от времени жизни кэша, измененная статья или модуль будут отображены верно, а вот различные модули, например выводящие списки новых материалов при включенном кэшировании могут немного «врать», поскольку кэш модулей сбрасывается только при измении параметров публикации модуля или по истечению времени жизни кэша. Поэтому для сайтов использующих модули, выводящих часто обновляемую информацию (newsflash, displaynews и т.д.) время жизни кэша лучше устанавливать примерно 80-90% от среднестатистического времени добавления новостей или же вообще отключать кэширование в этих модулях.
Общие выводы
Итак, кэширование позвляет снизить нагрузку на сервер базы данных и благоприятно сказывается на скорости загрузки сайта. При выборе времени жизни кэша основным фактором является периодичность обновления материалов на сайте. При этом необходимо помнить, что включение механизма кэширования в глобальных настройках сайта приведет к кэшированию материалов сайта, а для кэширования модулей сайта необходимо зайти в редактирование параметров этих модулей и выставить параметру Enable cache значение «Да».