Принцип работы механизма кэширования
Итак, разберемся что такое кэш и зачем он нужен. Кэшем можно назвать промежуточные ячейки памяти, в которые быстрее обычного записываются файлы, к которым вероятность обращения считается найбольшей. Как все это работает? Когда кто –то обращается к какому-то материалу в первый раз, то происходит сохранение выбранных файлов в каталоге \cache. При последующем обращении к файлам, менеджер кэша проверяет находится ли данный материал в КЭШе или нет, проверка осуществляется по имени, дате создания, модификации и прочему, если да то он его воспроизводит, если нет то происходит его сохранение. Перед тем как пользователь увидит то, что его интересует, этот материал сперва будет помещен в кэш. Также если дата и время создания кэша будет отличаться от заданного времени его жизни, то будет выполнено обновление кэша, то есть пересохранение.
Итак, с базовыми понятиями мы ознакомились. Что мы теперь знаем? Время жизни кэша является довольно важным параметром. Если установить его малым то постоянно будет происходить перекэширование, те постоянные запросы к БД, если установить слишком большое время жизни, то информация или какие то эффекты могут не столь корректно отображаться как то хотелось бы. Поговорим обо всем этом подробнее.
Преимущества длительного кэширования
По дефолту, время жизни кэша составляет 900 секунд. Пятнадцать минут не такой большой период, врятли вы что то обновляете каждые 15 минут. Поэтому обновление кэша с такой периодичностью является не столь прагматичным. Увеличив это время, вы тем самым уменьшите загруженность вашего сервера, и увеличите скорость работы всего сайта. По моему мнению, оптимальным временем жизни, должно быть время проходящее между вносимыми на сайт изменениями. Если вы что-то меняете каждый день, то можно выставить время от 20-24 часов, в зависимости от того, сколько времени у вас на все это уходит. И так дальше по аналогии.
Недостатки длительного кэширования
Но есть конечно же и недостатки, невозможно только выигрывать, в чем то мы и проигрываем. Так, увеличив время мы выиграли в разгруженности сервера БД, Но если к примеру вы с помощью мамботов захотите внести какие-то изменения на сайте, к примеру что-то выделить, изменить цвет и тд то из за большого значения времени жизни, вы не увидите мгновенного изменения отображения информации. Данные как воспроизводились из кэша так и будут воспроизводиться до тех пор как истечет время жизни кэша.
При каком-либо внесенном изменении в обьект, будь то статья либо модуль то произойдет пересохранение кэша для данного обьекта, и внезависимости от времени жизни изменения сразу же будут отображаться корректно, а модули, приводящие к каким-либо эффектам или выводящие данные об новинках на сайте, могут работать с опозданием. Поэтому желательно для тех модулей, которые используются для вывода часто изменяемой информации либо устанавливать время жизни небольшим либо отключать вовсе кэширование.
Использование кэша в расширениях Joomla!
Чтобы осуществить механизм кэширования, в CMS Joomla есть специальная библиотека Cache Lite. Класс JCache Lite Function управляет работой кэша. С помощью метода Call можно вызвать любую функцию и задать для ее работы необходииые параметры. Первый параметр является именем функции, остальные параметры – значения самой функции. При обращении к методу call выполняется поиск файла кэша для указанной функции и ее параметров. Если кэш-файл существует и при этом параметр времени жизни кэша еще не истек, то вместо вызова данной функции происходит чтение информации из заданного файла кэш. Если файла в кэш нет, то выполнятся данная функция и ее результат будет записан в кэш.
Класс mosCache
С помощью класса mosCache выполняется доступ к JCache Lite Function. Данный класс содержит два метода:
getCache($group='')
cleanCache($group=false)
Рассмотрим пример работы с классом mosCache:
Попробуем разобраться, как все это работает. При обращении к методу call, будет выполнена проверка на наличие данной функции, затем будет проверено есть ли в кэше информация о данной функции. Если да то информация будет передана из кэша, если нет, функция выполнит какие то действия с ее параметрами и результат поместит в кэш.
Использование класса JCache_Lite_Function
Ниже показан пример работы с JCache_Lite_Function:
Источник:http://jmworld.ru/ssttss/2012-08-02-13-25-5/1219-2012-06-18-18-43-55.html