Кэширование данных позволяет ускорить загрузку сайта и снизить нагрузку на сервер базы данных. В глобальных настройках Joomla! для управления кэшем присутствуют 3 параметра: включение механизма кэширования, директория для хранения файлов кэша и время жизни кэша. В данной статье описывается общий принцип работы механизма кэширования и приведены фрагменты одной из тем форума русского общества Joomla!, посвященной вопросу выбора оптимального времени жизни кэша.
Принцип работы механизма кэширования
При первом обращании к материалу или, допустим, к модулю происходит сохранение выбранных данных в файлах, размещенных в директории /cache. Механизм генерации имен файлов гарантирует, что они никогда не пересекутся с существующими, а содержимое этих файлов, помимо закэшированных данных объекта, содержит еще дополнительную уникальную информацию о закэшированном объекте.
При последующих обращениях, менеджер кэша Joomla! проверяет, существует ли в кэше объект с заданными параметрами (в том числе названием, содержимым, датой создания, модификации т.д.), если нет — значит материал изменялся или же, просто еще ни разу не кэшировался. Если для запрашиваемого объекта отсутствуют данные в кэше, то перед отображением объекта пользователю эти данные будут помещены в кэш. А если закэшированные данные есть, то вот в этом случае происходит проверка времени кэширования: если дата и время создания кэша отличаются от текущего на интервал больший, чем время жизни кэша, установленное в параметрах конфигурации, то объект будет закэширован заново.
Преимущества длительного кэширования
По умолчанию, время жизни кэша равно 900 секунд или 15 минут. Это означает, что, даже при отсутствии изменений на сайте, каждые 15 минут кэш будет пересоздаваться, а значит будут выполняться и лишние запросы к базе данных. Увеличение времени жизни кэша позволяет менеджеру кэша дольше использовать закэшированные данные, тем самым еще больше снижая общее количество запросов к базе данных.
На мой взгляд, оптимальным временем жизни кэша является интервал обновления сайта: если вы добавляете новости не чаще, чем раз в сутки, а на добавление новостей, допустим, у вас уходит 1 час, то время жизни кэша можно смело ставить 82800 секунд (23 часа).
Недостатки длительного кэширования
Как известно, с помощью мамботов можно производить манипуляции с текстом материалов, не внося реальных изменений в текст. Например, выделять какие-то слова или термины, заменять ссылки или прятать фрагменты текста. Так вот, если у нас включен кэш, и время жизни выставлено большое, то установив и опубликовав какой-нибудь новый мамбот, Вы можете не увидеть изменений, потому что Joomla! будет по-прежнему отображать данные из кэша.
Так как при любом изменении объекта (материала, модуля и т.д.) происходит перегенерация кэша этого объекта, то независимо от времени жизни кэша, измененная статья или модуль будут отображены верно, а вот различные модули, например выводящие списки новых материалов при включенном кэшировании могут немного «врать», поскольку кэш модулей сбрасывается только при измении параметров публикации модуля или по истечению времени жизни кэша. Поэтому для сайтов использующих модули, выводящих часто обновляемую информацию (newsflash, displaynews и т.д.) время жизни кэша лучше устанавливать примерно 80-90% от среднестатистического времени добавления новостей или же вообще отключать кэширование в этих модулях.
Общие выводы
Итак, кэширование позвляет снизить нагрузку на сервер базы данных и благоприятно сказывается на скорости загрузки сайта. При выборе времени жизни кэша основным фактором является периодичность обновления материалов на сайте. При этом необходимо помнить, что включение механизма кэширования в глобальных настройках сайта приведет к кэшированию материалов сайта, а для кэширования модулей сайта необходимо зайти в редактирование параметров этих модулей и выставить параметру Enable cache значение «Да».
Использование кэша в расширениях Joomla!
Для реализации механизма кэширования, разработчики Joomla! используют бесплатную библиотеку Cache_Lite. В качестве менеджера кэша выступает класс JCache_Lite_Function. Данный класс содержит метод call, позволяющий вызвать произвольную функцию по имени и передать ей на вход указанные параметры. При вызове этого метода, в качестве первого параметра указывается имя функции, а далее — произвольное количество переменных, являющихся параметрами этой функции. При вызове метода call, происходит поиск файла кэша для этой функции и заданного набора параметров. Если такой файл найден, и время жизни этого закэшированного объекта не истекло, то вместо реального вызова функции, происходит возврат данных из файла. Если файл не найден, то это означает, что данная функция с такими параметрами еще не вызывалась. В этом случае происходит вызов функции, с передачей ей на вход указанных параметров, а результат работы функции помещает в кэш. Доступ к объекту менеджера кэша JCache_Lite_Function осуществляется через класс mosCache, который содержит всего 2 метода: Фабричный статический метод, возвращающий ссылку на объект менеджера кэша для заданной группы. В качестве имени группы может выступать любой текстовый идентификатор. Обычно, в качестве имени группы, используют имя компонента (например com_content). Данный метод позволяет очистить кэш всех объектов для выбранной группы. Метод может использоваться для глобальной очистки кэша объектов вашего расширения. Рассмотрим пример работы с классом mosCache: Теперь, давайте рассмотрим как это будет работает. При вызове метода call менеджер кэша, проверит наличие функции myfunction, затем, попробует найти закэшированные данные для данной функции с указанными значениями параметров. Если найдет, то вернет данные из кэша, в противном случае — он вызовет данную функцию и передаст ей параметры $arg1, $arg2 и $arg3. А результат работы функции поместит в кэш, чтобы при следующем обращении не вызывать функцию. ПРИМЕЧАНИЕ: класс использует параметры глобальной конфигурации Joomla для управления менеджером кэша JCache_Lite_Function. Т.е. если в глобальных настройках выключить кэш, то менеджер кэша в функции call будет всегда производить явный вызов указанной функции, не пытаясь найти закэшированные объекты. Поэтому, если вы хотите управлять кэшированием данных, вне зависимости от параметров глобальной конфигурации Joomla!, необходимо использовать JCache_Lite_Function напрямую. Рассмотрим пример работы с классом JCache_Lite_Function: Принцип работы данного примера отличается от предыдушего только тем, что мы явно включаем использование кэширования (вне зависимости от настроек Joomla!) и указываем свое время жизни кэша.Общие сведения
Использование класса mosCache
// функция, результат работы которой необходимо закэшировать
function myfunction($arg1, $arg2, $arg3) {
return $arg1 . $arg2 . $arg3;
}
// получаем экземпляр JCache_Lite_Function для нашего расширения
$cache =& mosCache::getCache('com_mycomponent' );
// вызываем функцию посредством менеджера кэша JCache_Lite_Function
echo $cache->call('myfunction', $arg1, $arg2, $arg3 );
Использование класса JCache_Lite_Function
// функция, результат работы которой необходимо закэшировать
function myfunction($arg1, $arg2, $arg3) {
return $arg1 . $arg2 . $arg3;
}
// параметры конфигурации Joomla
global $mosConfig_absolute_path, $mosConfig_cachepath;
// подключаем файл с определением класса JCache_Lite_Function
require_once( $mosConfig_absolute_path . '/includes/joomla.cache.php' );
// формируем массив параметров
$options = array(
// директория для хранения файлов кэша
'cacheDir' => $mosConfig_cachepath . '/',
// флаг включения/отключения кэширования
'caching' => 1,
// название группы объектов
'defaultGroup' => 'com_mycomponent',
// время жизни кэша — 3600 секунд или 1 час
'lifeTime' => 3600
);
// получаем экземпляр JCache_Lite_Function для нашего расширения
$cache = new JCache_Lite_Function( $options );
// вызываем функцию посредством менеджера кэша JCache_Lite_Function
echo $cache->call('myfunction', $arg1, $arg2, $arg3 );
| < Предыдущая | Следующая > |
|---|

Комментарии
Коммент от
Авг 04, 2008Комментатор
Брикалов КонстантинсПАСИБО!!
Коммент от
Дек 03, 2008Комментатор
ВадимКоммент от
Янв 09, 2009Комментатор
256Коммент от
Фев 05, 2009Комментатор
Aleks_EL_DiaКоммент от
Фев 22, 2009Комментатор
Aleks_El_DiaКоммент от
Мар 14, 2009Комментатор
maxo127Коммент от
Мар 14, 2009Комментатор
ВадимДля этого необходимо использовать мод Apache Memcache + к БД через специальные функции.
В Durpal для этого есть модуль Memcache and Integration, который позволяет во много раз сократить нагрузку на Базу. В общем и для мамбы это возможно сделать.
RSS лента комментариев этой записи