Кэширование в Joomla. Кэширование Joomla

В этой статье рассмотрим «Настройки кэша » в «Общих настройках» админки Joomla 3, которые находятся на вкладке «Система » . Эти настройки позволяют сохранять запрошенные однажды пользователям страницы сайта и отдавать их сразу из файла, а не обращаться каждый раз с запросами к базе данных. Это значительно снижает нагрузку на сервер и позволяет быстрее отдавать контент пользователям. Правильно настроенный кэш - это залог быстрой работы сайта и один из инструментов SEO-продвижения сайта в топ выдачи поисковых запросов.

Для того, чтобы понять, как выглядят «Настройки кэша» в админке Joomla посмотрим на картинку ниже:

«Настройки кэша» в админке Joomla 3

«Настройки кэша» в админке Joomla состоят из нескольких полей, значения которых можно настраивать:

  • Поле «Обработчик кэширования » - Выберите способ кэширования. Стандартный механизм кэширования - на основе файлов. Пожалуйста, убедитесь, что каталоги файлов кэша доступны на запись.
  • Поле «Путь к каталогу кэша » - Пожалуйста, укажите папку для хранения файлов кэша.
  • Поле «Время кэширования » - Максимальное время жизни кэш-файлов, в минутах. По истечении этого времени кэш будет обновлён.
  • Поле «Специфическое кэширование для платформы » - Включить или отключить специфическое кэширование для платформы. Включите, когда вывод HTML на мобильный отличается от других устройств. (По умолчанию отключено)
  • Поле «Системный кэш » - Включает или отключает кэширование, а так же определяет его уровень. Стандартный уровень: системный кэш меньше, Прогрессивный уровень (по умолчанию): быстрее, системный кэш больше, поскольку включает в себя кэширование модулей. Не подходит для очень больших сайтов.

Для внесения изменений нужно изменить данные в этих полях и воспользоваться кнопкой «Сохранить» или «Сохранить и закрыть» в верхнем ряду кнопок управления «Общих настройках» админки. Для того, чтобы покинуть общие настройки без внесения изменений можно воспользоваться кнопкой «Отменить».

Зачем использовать кэш?

Все просто. Получение ранее сохраненной информации намного быстрее (в 10 или более раз), чем её первоначальная генерация. Если вам нужен радикальный пример - книга является долгосрочным кэшем знаний её авторов. Аккумулирование этих знаний может занять годы, в то время как чтение этого кэша намного быстрее.

Но давайте вернемся к Joomla, и если быть более точным, здесь мы имеем дело с кэшированием веб-приложения - созданием временных статических копий динамических страниц (или более мелких единиц информации). Кэширование свойственно для веб-приложений, так как типичный веб-сайт отображает один и тот же контент снова и снова, и без кэша приходилось бы все генерировать заново для каждого показа страницы. Система кэширования временно сохраняет сгенерированную кодом информацию в объекте кэша, и отдает её обратно, когда она запрашивается следующим пользователем.

Типы кэша в Joomla

Кэш страницы (Page cache)

Делает снимки целой страницы, включая всё: компоненты, модули, плагины и шаблон. Это самый быстрый, но при этом наименее гибкий подход кэширования. Для его активации необходимо включить плагин «Система - Кэш».

Прогрессивный кэш (Progressive cache)

Это тип кэша появился в Joomla 1.6. Он делает снимки каждого уникального набора модулей (обычно каждой страницы). Влияет на все модули и работает как слой над кэшем модулей, переопределяя их настройки. Показывает контент индивидуально для каждого посетителя. Включается при установке уровня кэша в значение «Прогрессивный» в общих настройках сайта.

Стандартный кэш (Conservative cache)

Если вам нужен более тонкий контроль над каждым кэшем модулей в отдельности, то используйте стандартный уровень кэширования. Еще одно его отличие от прогрессивного кэша в том, что он показывает один и тот же закэшированный контент всем посетителям веб-сайта.

Кэш модуля и представления компонента

Они формируют своеобразную группу, так как оба создают статическую копию полных выходных данных компонента или модуля. Это наиболее распространённый тип кэша, который иногда приравнивают к кэшированию в Joomla в общем.

Его позитивной стороной является то, что он хорошо проявляет себя в плане скорости. А негативная сторона заключается в том, что он отключает любое взаимодействие пользователь<->расширение<->фреймворк, пока не истечет закэшированная копия. Это означает, что он не подходит для компонентов или модулей, которые реагируют на действия пользователя или отображают часто изменяемый контент.

Так как закэшированная копия модуля или компонента содержит только собственные выходные данные, любой внешний файл, который будет вызван с помощью таких методов как $document->addStyleSheet() не будет подключен. Были придуманы различные обходные решения, но все они требуют дополнительных вычислительных ресурсов, что уменьшает эффект использования кэширования.

Кэширование представления компонента

Кэширование представления компонента осуществляется с помощью метода display($cachable, $safeurlparams) контроллера. Для этого параметр $cachebale необходимо установить в значение true , а через параметр $urlparams передать массива URL-параметров и их типов фильтра:

$cachable = true; $safeurlparams = array("catid" => "INT", "id" => "INT", "cid" => "ARRAY", "limit" => "UINT", "limitstart" => "UINT", "filter_order" => "CMD", "filter_order_Dir" => "CMD", "filter-search" => "STRING", "lang" => "CMD", "Itemid" => "INT"); parent::display($cachable, $safeurlparams);

При этом массив URL-параметров формирует уникальный cache id.

Режимы кэширования модуля

Существует 5 различных режимов кэширования модуля. Три из них активируются через поле cachemode в XML-файле манифеста модуля:

  • static - будет использоваться один кэш-файл для всех страниц с одинаковыми параметрами модуля. Рекомендуется для модулей, которые не меняются.
  • itemid - изменяется при смене Itemid. Такой режим больше всего подходит для динамических модулей, которые изменяются от страницы к странице, например: меню, изображения контента и т.п.
  • oldstatic - обратно совместимый с Joomla 1.5 режим.

Еще два режима кэширования должны вызываться непосредственно из модуля:

  • safeuri - Id кэша создается из массива URL-параметров, так же как в компоненте. Используйте этот режим, если модуль зависит от параметров URL, а не Itemid (например модуль, который отображает изображение в зависимости от категории). Свойство $cacheparams->modeparams является массивом URL-параметров и их типов фильтра.
  • Id - модуль устанавливает свой собственный кэш в зависимости от собственной формулы, которая передается через $cacheparams->modeparams

Для использования этих двух режимов, вместо поля cachemode используйте поле owncache в XML-файле манифеста:

Свойства объекта, которые передаются в метод moduleCache() , не требуют особых разъяснений. В качестве примера можно взять модуль связанных материалов (mod_related_items), который использует режим safeuri и заменяет некешированную функцию modRelatedItemsHelper::getList($params) :

$cacheparams = new stdClass; $cacheparams->cachemode = "safeuri"; $cacheparams->class = "ModRelatedItemsHelper"; $cacheparams->method = "getList"; $cacheparams->methodparams = $params; $cacheparams->modeparams = array("id" => "int", "Itemid" => "int"); $list = JModuleHelper::moduleCache($module, $params, $cacheparams);

Кэш обратного вызова (Callback cache)

Этот тип кэша позволяет дифференцировать различные части расширения и кэшировать только те, которые нужно кэшировать, при этом оставляя динамические части некэшируемыми. Кэширует результаты вызова функции в коде.

Кэш выходных данных (Output cache)

Кэширует выходные данные некоторой части скрипта. В основном это output buffering с кэшированием, и используется довольно редко.

Raw-кэш (Raw cache)

Кэширует любые элементы данных. Полностью контролируется разработчиком - что сохранять, когда сохранять и как классифицировать сохраненные элементы (cache id). Это тип кэша часто используется ядром Joomla для различных операций: список компонентов, список модулей, дерево меню, доступные языки, группы пользователей и т.п.

Обходные решения (Workarounds)

Обходные решения помогают обойти известные ограничения кэширования, такие как невозможность подключения файлов стилей или javascript из модуля или компонента. При использовании кэша представления компонента и кэша обратного вызова, можно включать или выключать определенные обходные решения. Использовать их нужно только тогда, когда закэшированная функция манипулирует хидером (header) или путем (pathway).

setWorkarounds

Метод JCache::setWorkarounds($data,$options=array()) подготавливает данные, которые будут сохранены в кэше вместе с обходными решениями, и принимает следующие опции:

  • nopathway - не сохранять pathway данные
  • nohead - не сохранять header данные
  • nomodules - не сохранять данные модуля
  • modulemode - если nohead равно 0, не сохранять следующие данные модуля: title , description , link , metaTags

getWorkarounds

Метод JCache::getWorkarounds($data,$options=array()) применяет обходные решения над данными, сохраненными с обходными решениями. Он воссоздаёт header, pathway и модули и возвращает основные сохраненные данные. Работает автоматически - конкретное обходное решение выполняется, только если его данные были сохранены отдельно.

Разница в использовании кэша обратного вызова и raw-кэша

Обычно при разработке компонента вполне достаточно кэша представления, в особенности это касается простых компонентов. Но если компонент создает контент на лету, то лучше всего выбрать другой тип кэша. В такой ситуации будет удобен кэш обратного вызова или raw-кэш.

Кэш обратного вызова функции вернет в точности тот же результат, который бы вернула незакешированная функция, только этот результат будет закэширован. Непосредственно функция будет вызвана только при первом обращении к ней.

Мы вызываем кэширование при помощи JFactory::getCache() , и если мы используем кэш обратного вызова, наш код должен выглядеть следующим образом:

$cache = JFactory::getCache("somegroup"); $result = $cache->get(array("someclass", "somemethod"), $methodparams, $id, $workarounds, $workaroundoptions);

Последние три параметра в методе get() являются необязательными.

Обратите внимание на то, что этот не тот же метод get() , который мы используем в raw-cache. Кэш обратного вызова автоматически получает данные, если они существуют. Если их нет, то он выполняет обратный вызов, возвращает данные из обратного вызова и сохраняет их до следующего вызова. У кэша обратного вызова не существует метода store() !

При использовании raw-кэша у разработчика есть прямой доступ к методам get() и store() , и за логику ответственен непосредственно разработчик. Этот кэш удобен, когда необходимо сохранить информацию, но не вызов функции (например: xml-данные, картинки, описание товаров и т.п.), или когда необходимо передать большой объем данных из одной страницы на другую.

Ниже приведен код использования raw-кэша:

$cache = JFactory::getCache("somegroup", ""); if (!$somevariable = $cache->get("cacheId")) { // выполняем действия и сохраняем результат в $somevariable // сохраняем $somevariable в кэше $cache->store($somevariable, "cacheId"); }

Чтобы использовать raw-кэш, в качестве второго параметра метода getCache() мы должны передать пустую строку.

Что случится, если несколько кэшей будут работать одновременно?

Типы кэшей работают как непрозрачные слои друг над другом (исключая кэш модуля / представления компонента, который работает параллельно). Чтобы это понять, мы должны представить, что смотрим на веб-страницу сверху, где кэш страницы представляет верхний уровень, в то время как кэш обратного вызова, выходных данных и raw-кэш представляют нижний уровень. Получается, что верхние уровни перекрывают нижние, и например, при использовании кэша страницы весь остальной кэш перестает действовать.

Но есть исключение, когда мы используем разное время для разных типов кэша. Например, мы можем кэшировать страницы в течение короткого промежутка времени и кэшировать изображения в течение долгого. В таком случае, при рендеринге страницы изображение будет вытягиваться из кэша.

Обработчики кэша

Обработчики кэша - это чернорабочие. Именно они выполняют всю черновую работу и сохраняют информацию на выбранном медиа. Для использования кэша должен быть доступен хотя бы один обработчик кэша.

Из всего вышесказанного Мы поняли, что включение кэширования помогает в ускорении Joomla. Но как же быть, если мы регулярно добавляем материалы на сайт, а изменения и добавления новых статей никто не видит, потому что все страницы берутся из кэша? Тут есть два решения этой проблемы:

1. Можно вручную удалять кэш со своего сайта после каждого обновления. Для этого зайти в административную панель своего сайта и справа вверху найти вкладку инструменты и нажать "Очистить кэш":

Теперь выделяйте все элементы, кэш которых Вы хотите почистить и нажимайте справа вверху "Удалить":

Кроме этого желательно ещё удалить "Устаревший кэш" для удаление тех записей, которые уже не актуальны. Для этого заходите в "Инструменты">>"Удалить устаревший кэш" и в открывшемся окне справа нажать на кнопку "Удалить устаревший кэш":

2. Второй способ более удобный и разумный. В общих настройках Вы сами включаете кэширование и выставляете время жизни кэша в минутах. Время жизни кэша нужно выставлять в зависимости от того, как часто у Вас на сайте происходят изменения (например, добавляются статьи и прочее). Если Вы пишите одну статью в день, то время жизни можно выставить 1440 минут (24 часа). По истечении этого времени, кэш удалится самостоятельно и все добавленные статьи станут видны пользователям. Для включения кэша пройдите по пути "Сайт">>"Общие настройки">>"Система" и там в правой части экрана найдите "Установки кэша":

Автоматическая очистка кэша joomla значительно упростит Вам жизнь и поможет избежать ненужных разговоров с Вашим сервером о сильной нагрузке.

Кэширование модулей Joomla

На Вашем сайте могут быть установлены модули, которые не желательно было бы кэшировать, например, модуль "Самые читаемые" . Ведь информация в этом модуле может изменяться значительно чаще, чем добавляются новые статьи, поэтому нам нужно выключить кэширование в этом модуле. Для этого заходим в административную панель своего сайта, переходим в "расширения">>"менеджер модулей", выбираем нужный модуль и заходим в его настройки. В правой части ищем вкладку "Расширенные параметры" и в ней отключаем кэширование или устанавливаем меньшее время жизни кэша для более частого обновления информации в этом модуле.

Сегодня я вас научу, как ускорить свой сайт на Joomla с помощью кэширования . Чтобы настроить кэширование для сайта нужно перейти в «Общие настройки».

Затем вкладка «Система» и здесь есть настройки кэша. Сейчас у нас по умолчанию кэширование отключено. Чтобы его включить, нужно сначала выбрать стандартное или прогрессивное кэширование. Сразу скажу, что при прогрессивном кэшировании сайт будет работать быстрее, выбираем его. Обработчик - файл и время кэширования 15 минут.

Что такое кэширование? В течение 15 минут вас сайт не будет изменяться. Не будет каждый раз показываться новые улучшения сайта, только каждые 15 минут. Поэтому выбирая это время, смотрите, насколько часто ваш сайт обновляется. Если у вас какой-то новостной портал, который должен обновляться каждые 5 минут, вы ставите кэширование меньше. Если у вас обыкновенный сайт, то 15 минут это будет оптимальный вариант.

Бывают какие-то глюки в некоторых сайтах, вы всегда проверяйте прошли ли изменения. Есть одно «но». Когда вы изменяете быстро сайт, то это кэширование может сыграть очень плохую шутку, потому что вы можете что-то изменить и при просмотре сайта вы изменений не увидите.

Для этого есть специальный встроенный сервис, чтобы удалять кэш и чтобы изменения, которые вы сделаете на сайте были видны сразу же. Это «Обслуживание» - «Очистить весь кэш» и «Очистить устаревший кэш».

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

Есть такой интересный сайт, как http://www.nonumber.nl/. Это разработчик расширений для Joomla, у него много бесплатных расширений. Перейдем на Extensions и найдем здесь Cache Cleaner .

Есть два варианта - бесплатно скачать или купить за 10 евро. Мы скачиваем бесплатный.

Затем переходим в административную панель и его установим. Установилось все нормально и сразу предупреждение: «Пожалуйста, очистите кэш вашего Интернет-обозревателя». Потом необходимо включить этот плагин в «Менеджер плагинов.

Давайте разберем настройки. «Автоочистка при сохранении» - если мы сохраняем какое-то изменение на сайте, у нас автоматически будет удаляться кэш. Есть «Панель управления», разрешить это делать или уведомлять. Также на «Лицевой части сайта» мы можем разрешить и уведомлять, тоже самое. «Очищать при действии». Когда очищать кэш, когда мы сохраняем, когда мы применяем - save, apply . То есть нам не нужно будет каждый раз удалять кэш, он будет автоматически удаляться.

Также «Очистка других каталогов» - tmp . Если мы загружаем расширение через папку tmp, также она будет очищаться. И «Автоочистка при сохранении» только на версии PRO, каталоги например. Тоже «Очистка таблиц и базы данных», только PRO. Если нам это очень сильно нужно мы покупаем PRO за 10 евро. Дополнительные параметры: «Отображение размера кэша» - будет показываться размер кэша.

И после сохранения появляется такая кнопка «Очистить кэш». Можем сами нажимать на нее и будет нам показываться сколько Кб кэша удалили или мы можем настроить не показывать ее. Если на «Лицевая часть сайта» ставим «нет», то показываться не будет.

Всем привет. В этой статье будем разбираться в кэшировании CMS Joomla и все что с ним связано, но для начала давайте определим, что же это такое.

Определение кэширования

Кэширование — это запоминание данных на вашем компьютере при первом заходе на сайт. Теперь более детальней, когда вы впервые зашли на тот или иной ресурс, все изображения, скрипты и т.д скачиваются на ваш компьютер, это делается для того, что бы когда вы повторно будете заходить на этот же сайт, они не качались повторно, а просто открывались с вашего компьютера. Таким образом, время загрузки сайта значительно уменьшается.

Настройка кэширования в Joomla

Перед настройкой кэша в Joomla, сначала нужно убедиться, что включен плагин кэширования, для этого переходим в «Расширения », затем «Менеджер плагинов », через форму поиска ищем «Система – Кэш » и включаем ее (если была отключена).

Теперь переходим непосредственно к самой настройке, для этого переходим в «Система », далее в «Общие настройки » и в вкладку «Система », после «Параметры отладки » видим «Настройки кэша »

В выпадайке «Кэш » есть три варианта выбора:

    • Кэширование отключено;
    • Стандартное кэширование;
    • Прогрессивное кэширование;

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

Очистка кэша в Joomla

Очистить кэш в Joomla достаточно просто, для этого переходим в «Система » и «Очистить весь кэш »

Использование кэша браузера Joomla

У плагина «Система – Кэш », есть такая функция как «Использовать кэширование в браузере », что она делает и зачем нужна? Когда она включена, ваш компьютер будет помимо стандартного сохранения кэша, будет сохранять еще и дополнительно, во-первых это еще нагрузка на сайт, во вторых пользователь не увидит изменений на сайте, пока не очистит свой кэш локально на компьютере. Я бы вам не рекомендовал включать эту функцию.

Похожие публикации