Joomla 3 как включить кэширование в браузере. Настройка кэширования в Joomla. Особенности кэширования Joomla или приоритеты кэша

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

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

Но обо всем по порядку.

Я сам недавно столкнулся с этим на одном моем проекте. Перед тем как я вам расскажу как включать кэширование в Joomla, я хочу вам вкратце рассказать из своего опыта о колоссальном эффекте, который дает включение кэширования на сайте.

Так вот, у меня есть сайт тоже на Joomla, посещаемость которого с августа по ноябрь увеличилась на треть и сейчас в среднем составляет 15 000 посетителей в сутки. Этот сайт крутится на виртуальном сервере (VPS) на хостинге reg.ru на тарифном плане VPS-3. Этот VPS оснащен процессором 2х2000 Мгц и оперативной памятью в 1024Гб. Хостинг очень хороший и стабильный, я про него думаю написать отдельную статью. Так вот в последний месяц из-за резкого увеличения посещаемости мне на почту стали периодически (по несколько раз в день) приходить уведомления о нехватке оперативной памяти на моем VPS. Меня конечно эти уведомления напрягали, но так как сайт при этом продолжал нормально открываться, то я откладывал решение данной проблемы. Неделю назад сайт во время уведомлений о нехватке памяти начинал жутко тормозить. А затем в один прекрасный день сайт все таки перестал открываться совсем по причине того, что упал сервер баз данных MySQL из-за нехватки оперативной памяти. Я его конечно тут же стартовал из панели ISP менеджера. В итоге с момента падения SQL сервера и до момента как я это заметил и стартовал сервер MySQL сервер прошло примерно тридцать минут. Заняться сайтом в этот день у меня так и не получилось, а вечером я пришел домой усталый и решил отложить все на следующий день. Уже глубоким вечером, опасаясь, что mySQL сервер ночью снова может упасть, и сайт может до самого утра, пока я сплю, не работать, я подключил платный мониторинг сайта. Этот мониторинг отслеживает работоспособность сайта и как только он падает, высылает SMS на телефон о падении сайта. Данная услуга на сайте reg-ru стоит всего 100 руб/мес. Перед сном я положил телефон поближе, чтобы услышать SMS-ку. После полуночи все таки пришла эта SMS, оповещающая о том, что сайт снова не работал. Я быстро вскочил, включил ноутбук и запустил упавший процесс sqld, отвечающий за работу сервера баз данных mySQL. На этот раз сайт не работал всего лишь около 5 минут. Столько времени мне понадобилось, чтобы встать, включить ноутбук, зайти в ISP панель управления хостингом и запустить упавший процесс. Конечно же у меня весь сон улетучился, и я стал думать, как решить проблему с нехваткой памяти. У меня было два решения:

  1. перейти на более дорогой тариф VPS-4, на котором в два раза больше памяти (2048 МБ);
  2. попытаться оптимизировать работу сайта.

Кстати вот перечень всех тарифов на VPS сервера (можете кликнуть для получения более подробной информации):

Тариф VPS-4 стоит в два раза дороже. Подумав, что перейти на более дорогой тариф я могу в любое время, я решил все таки сначала попробовать оптимизировать сайт. Я являюсь владельцем VPS сервера, и мне доступны любые его настройки.

Благо, в настройках сервера мне копаться не пришлось, т.к. первое, на что я решил обратить внимание при оптимизации - это посмотреть как обстоят дела с кэшированием на моем сайте. Оказывается на моем сайте не было включено кэширование. После включения кэширования в Joomla, потребление памяти на VPS сервере стало примерно в среднем 650-750 Мб. Уведомления о нехватке памяти мне перестали приходить, а страницы сайта стали открываться даже быстрее, чем раньше. Вот такая история.

Для наглядности приведу скриншот из Яндекс Метрики, показывающий, насколько снизилось время ответа сервера после включения кэширования.


Включаем кэширование в Joomla при помощи системного плагина.

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

Первый способ это включение кэширования страниц сайта при помощи встроенного системного плагина.

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



Включаем данный плагин.

Данный плагин работает следующим образом. Когда какая либо страница сайта запрашивается браузером, Joomla сначала ищет эту страницу среди сохраненных ранее файлов в своем кэше. Если в кэше данная страница отсутствует или она присутствует, но время кэширования уже вышло, то Joomla обращается к базе данных с запросом содержимого данной страницы. Полученные из базы данные он подставляет в используемый сайтом шаблон, формирует окончательную страницу, сохраняет ее в виде файла в папке с кэшем и затем выдает HTML версию запрошенной страницы браузеру. Т.е. при первом запросе страницы сервер делает те же операции, что и при выключенном кэше и даже более того ему приходится еще сохранять страничку у себя в кэше. Но зато когда этот же браузер или браузер любого другого компьютера запрашивает эту же страничку, joomla ищет эту страничку у себя в кэше, находит ее, определяет, что время кэширования еще не вышло и сразу же выдает HTML версию данной закэшированной странички браузеру без необходимости обращения к базе данных. При этом время загрузки страницы браузером значительно ускоряется, т.к. серверу уже не нужно тратить значительное время на обращение к базе данных, ожидание полученных данных от базы и на сборку страницы.

Плагин все кэшированные странички хранит в папке корень_сайта\cache\page\.

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

У меня под каждую страницу сайта в кэше создается отдельный файл размером примерно 50-90 килобайта. Поэтому, если даже на сайте будет тысяча страниц, то папка с кэшем будет размером менее 100 мегабайт.

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

У этого плагина есть дополнительная настройка "Использовать кэширование в браузере", но ее я вам включать не советую, и сейчас я объясню почему. Работает она следующим образом. Если эта настройка включена, то браузер при открытии любой страницы сайта будет дополнительно сохранять ее у себя в кэше на компьютере. В дальнейшем, когда этот браузер повторно обратиться к серверу с запросом этой же странички, то в HTTP ответе сервера всегда будет присутствовать заголовок “304 Not Modiifed”, которая говорит браузеру, что запрашиваемая страничка не изменилась на сервере и браузер может взять ее из своего кэша, если страничка сохранена в кэше (а браузеры по умолчанию настроены на сохранение страниц в кэше, если им это разрешает делать сервер). Но здесь нюанс в том, что сервер будет говорить браузеру о том, что страничка не изменилась на сервере даже в том случае, когда на сервере уже давно появилась обновленная закэшированная копия данной странички. Т.е. это означает, что браузер всегда будет обращаться к своей локально сохраненной версии странички и уже никогда не увидит изменений. Для того чтобы все таки заставить браузер загрузить актуальную версию страницы нужно будет зайти в настройки браузера и очистить локальный кэш браузера. Т.е. эта настройка нужна только для каких то совсем уж специфических сайтов, которые никогда не обновляются.


Как же узнать время, в течении которого на сервере будет храниться кэшированная копия странички. Время кэширования настраивается в совершенно другом разделе админки: "Общие настройки " (Global Configuration ) => "Система " (System ) => поле "Время кэширования " (указывается в минутах) в разделе "Настройки кэша " (Cache Settings ). Это поле регулирует время кэширования для всех способов кэширования, доступных в Joomla.


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

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

Включаем кэширование в Joomla при помощи стандартного и прогрессивного кэширования.

Общие настройки " (Global Configuration ) => далее переходим во вкладку "Система " (System ) => находим раздел "Настройки кэша " (Cache Settings ) => напротив поля "Кэш" (Cache ) выбираем из выпадающего списка "Стандартное кэширование " (Conservative caching ) или "Прогрессивное кэширование " (Progressive caching ).

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

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

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

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

Стандартное и прогрессивное кэширование (так же как и системный плагин кэширования) не кэшируют страницы для залогиненных пользователей.

Теперь возникает резонный вопрос: чем отличается стандартное кэширование (Conservative caching ) от прогрессивного кэширования (Progressive caching ).

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

Для этого в админке заходим в "Расширения " => "Менеджер модулей " => открываем необходимый нам модуль => Далее переходим во вкладку "Дополнительные параметры ". Здесь мы можем изменить время кэширования модуля изменив время кэширования в секундах в поле "Срок кэширования ". По умолчанию там стоит значение 900 секунд (т.е. 15 минут) или вовсе отключить кэширование модуля выбрав в поле "Кэширование " значение "Не кэшировать ".


При одновременном включении стандартного кэширования и системного плагина кэширования переопределение кэширования модулей не работает, т.к. кэширование при помощи плагина имеет приоритет.

Прогрессивное кэширование кэширует страницы отдельно для каждого индивидуального посетителя. Т.е. пришел посетитель User-A на сайт => Joomla проверяет свой кэш на наличие персональной (именно для посетителя User-A) кэшированной страницы => если в кэше такая страница отсутствует (или она устарела), то Joomla создает обращение к базе с запросом необходимых данных, вставляет эти данные в используемый шаблон, добавляет содержимое модулей и компонентов, которые присутствуют на странице (короче Joomla формирует страничку для посетителя), сохраняет сформированную для User-A страничку в кэше и выдает HTML версию страницы в браузер посетителя User-A.

Далее пришел на эту же страничку посетитель User-B => Joomla роверяет свой кэш на наличие персональной (именно для посетителя User-B) кэшированной страницы => Joomla обнаруживает в своем кэше только страницу для пользователя User-A => Joomla не выдает в браузер пользователя User-B страницу, кэшированную для пользователя User-A, а формирует для User-B новую страницу, сохраняет ее в кэше и после этого выдает ее в браузер посетителя User-B.

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

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

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

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

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

Очищаем кэш в Джумле.

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

Но что делать, если вы хотите, что бы изменения, произошедшие в базе данных увидели и ваши гости? Для этого в Joomla предусмотрен механизм принудительной очистки кэша.

Для этого в административной панели заходим в "Система " => "Очистить весь кэш ".

Выбираем все и нажимаем кнопку "Удалить ".

Решения сторонних разработчиков для кэширования сайта.

Если в силу специфики вашего сайта вам недостаточно возможностей предоставляемых встроенными в Joomla средствами, могу предложить вам очень хороший плагин под названием JotCache . Он предоставляет более гибкие настройки механизма кэширования:

  • позволяет исключить из кэширования отдельные страницы и модули;
  • для экономии места на диске есть возможность настроить автоматическое удаление устаревшего кэша (в Joomla есть только ручное удаление устаревшего кэша);
  • есть возможность сжимать кэшированную страницу перед сохранением в папку с кэшем (дает дополнительное ускорение загрузки страниц сайта) и многое другое.

Вы можете помочь проекту, рассказав о нем в социальных сетях:

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

Все просто. Получение ранее сохраненной информации намного быстрее (в 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-кэш представляют нижний уровень. Получается, что верхние уровни перекрывают нижние, и например, при использовании кэша страницы весь остальной кэш перестает действовать.

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

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

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

Дата публикации: 30.01.2013

Популярная CMS Joomla! умеет кэшировать материалы сайта. Данная возможность позволяет существенно снизить количество запросов к базе данных сервера и, как следствие, уменьшить время, затраченное на генерирование страниц, а значит, понизить нагрузку на сервер в целом. Данная возможность чрезвычайно полезна для сайтов с очень высокой посещаемостью.

Принцип работы данной функции состоит в следующем:

1) Пользователь обращается к материалу сайта;

2) Сервер генерирует данные и отправляет их в пользовательский браузер. При этом данный материал сохраняется в папке, которую указывает администратор сайта. Это папка называется папка кэша.

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

Появляется вопрос: "А как же тогда обстоят дела с обновлением сайта? Пользователь не сможет заметить изменения, которые были внесены нами, поскольку вся информация будет выдаваться ему из кэша?

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

Выбор правильного времени жизни кэша чрезвычайно важен для сервера. Основным фактором здесь выступает периодичность обновления информации. Например, если вы будете обновлять информацию раз в день, то логично будет выставить срок кэширования меньше 24 часов. Оптимальным будет 22 часа или 1320 минуты. За пару часов, которые остаются, можно вполне успешно обновить все материалы на сайте.

Если вы изменяете материалы раз в два дня, то поставьте время кэширования 46 часов или 2760 минут. Думаю, что здесь все понятно.

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

Для того чтобы включить кэширование, перейдите в панель администратора. Выберете пункт меню САЙТ - ОБЩИЕ НАСТРОЙКИ САЙТА - СИСТЕМА. Все установки кэша вы можете увидеть с правой стороны.

Установки для кэша Joomla!

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

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

Перейдите в пункт РАСШИРЕНИЯ - МЕНЕДЖЕР МОДУЛЕЙ. Выберите нужный вам, нажав на него, и вы попадете в его настройки. Нас интересует пункт параметры, который находится справа.

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

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

Для того чтобы очистить кэш вручную, перейдите в пункт ИНСТРУМЕНТЫ - ОЧИСТИТЬ КЭШ.

Резюме: Кэширование поможет вам заметно ускорить CMS Joomla! и повысить производительность сайтов, сделанных на ее основе. Бывает, что посетитель видит обновления сайта с задержкой. Для избегания подобной ситуации, необходимо правильно выбрать время кэширования. Основной критерий при выборе – это периодичность обновления информации на сайте. Для модулей, которые часто обновляют информацию, кэширование лучше отключить.

Еще статьи из категории blog

Создан доступный аналог самой черной краски

Черные краски и материалы, которые все привыкли видеть, на самом деле являются не совсем черными....

Расставим все точки над VDS/VPS хостингом. Читать тем, кто плохо разбирается в этом понятии.

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

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

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

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

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

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

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

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

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

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

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

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

Как оптимизировать Joomla 3, чтобы увеличить производительность? Мы знаем, что скорость загрузки почти самый важный фактор для успешной работы Вашего сайта. По умолчанию, Joomla не является медленной CMS, но Вы можете сделать несколько оптимизаций, чтобы увеличить скорость работы. Здесь Вы найдете несколько советов, которые сможете применить для ускорения работы Joomla 3. Вот несколько действий, которые помогут Вам легко ускорить работу Joomla:

1) Всегда используйте только последние версии Joomla и Расширений

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

Пользоваться последними версиями расширений так же важно для быстрой работы сайта, как и для самой Joomla.

2) Включите кэширование

Если выключено кэширование, то каждый раз, когда посетители сайта загружают одну из страниц, Джумле приходится выполнять сразу несколько действий: подгружать контент из базы данных, загружать установленные плагины, компоненты и модули, загружать Ваш шаблон и совмещать все это в одной единственной странице. Нет необходимости говорить о том, что этот процесс занимает время. Вот, где нам поможет внутренняя система кэширования Joomla. Когда включено кэширование, посетитель однажды загрузил страницу, а результат вышеописанных действий сохранится. Тогда все последующие посетители будут напрямую получать сохраненную версию этой страницы, как будто это простой HTML файл, который намного-намного легче и быстрее загружается. Вот почему кэширование один важных процессов, который должен быть включен, чтобы ускорить работу сайта.

Чтобы включить кэширование откройте Глобальные настройки (Система -> Общие настройки).

Затем надо нажать на вкладку Система , чтобы открыть настройки кэширование.

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

После выбора режима кэширования, нажмите на кнопку «Сохранить » вверху страницы.

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

Здесь Вы видите огромный список установленных плагинов. Самый простой способ найти плагин кэширования – это воспользоваться поиском. Просто наберите в поле поиска слово «Кэш» и нажмите на кнопку с изображением лупы.

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

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

Вот и все! Теперь Ваша система кэширования Joomla включена и работает!

2) Используйте сжатие

Еще одна вещь, которая намного увеличит производительность Joomla – это сжатие. Если включить внутреннюю компрессию, то страница, которую открывают посетители сайта, будет сжиматься до того как она у них отобразится. Если уменьшить размер вебстраницы с помощью компрессии, она загрузится намного быстрее. Чтобы включить сжатие в Joomla, нужно зайти в Общие настройки (Система -> Общие настройки ).

На этой странице Вы увидите множество настроек. Нажмите на вкладку «Сервер », чтобы отобразить серверные настройки.

Найдите надпись «Gzip-сжатие страниц » и нажмите на кнопку «Да », чтобы включить сжатие Joomla.

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

Ну вот, сжатие Joomla 3 включено. Для проверки сжатия страниц можно воспользоваться одним из многих бесплатных сайтов, например http://checkgzipcompression.com . Если все сделано правильно, то Вы увидите уведомление о том, что сжатие включено, а также немного информации о размере страниц. Как видно на картинке внизу, размер страницы нашего тестового сайта уменьшился в три раза.

Замечание

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

3) Добавьте правила для оптимизации.htaccess

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

ETag – указывает браузерам, что можно загружать из своего кэша изображение, которое уже отобразилось.

Expires headers – правило похоже на ETag, но позволяет устанавливать время жизни для разных типов файлов.

AddOutputFilterByType DEFLATE – уменьшает строчки кода скомпилированных HTML файлов, удаляя пустые строки, переходы и пробелы.

########## Begin - ETag Optimization

## This rule will create an ETag for files based only on the modification

## timestamp and their size.

## Note: It may cause problems on your server and you may need to remove it

FileETag MTime Size

# AddOutputFilterByType is now deprecated by Apache. Use mod_filter in the future.

AddOutputFilterByType

DEFLATE text/plain text/html text/xml text/css application/xml

application/xhtml+xml application/rss+xml application/javascript

application/x-javascript

# Enable expiration control

ExpiresActive On

# Default expiration: 1 hour after request

ExpiresDefault "now plus 1 hour"

# CSS and JS expiration: 1 week after request

ExpiresByType text/css "now plus 1 week"

ExpiresByType application/javascript "now plus 1 week"

ExpiresByType application/x-javascript "now plus 1 week"

# Image files expiration: 1 month after request

ExpiresByType image/bmp "now plus 1 month"

ExpiresByType image/gif "now plus 1 month"

ExpiresByType image/jpeg "now plus 1 month"

ExpiresByType image/jp2 "now plus 1 month"

ExpiresByType image/pipeg "now plus 1 month"

ExpiresByType image/png "now plus 1 month"

ExpiresByType image/svg+xml "now plus 1 month"

ExpiresByType image/tiff "now plus 1 month"

ExpiresByType image/vnd.microsoft.icon "now plus 1 month"

ExpiresByType image/x-icon "now plus 1 month"

ExpiresByType image/ico "now plus 1 month"

ExpiresByType image/icon "now plus 1 month"

ExpiresByType text/ico "now plus 1 month"

ExpiresByType application/ico "now plus 1 month"

ExpiresByType image/vnd.wap.wbmp "now plus 1 month"

ExpiresByType application/vnd.wap.wbxml "now plus 1 month"

ExpiresByType application/smil "now plus 1 month"

# Audio files expiration: 1 month after request

ExpiresByType audio/basic "now plus 1 month"

ExpiresByType audio/mid "now plus 1 month"

ExpiresByType audio/midi "now plus 1 month"

ExpiresByType audio/mpeg "now plus 1 month"

ExpiresByType audio/x-aiff "now plus 1 month"

ExpiresByType audio/x-mpegurl "now plus 1 month"

ExpiresByType audio/x-pn-realaudio "now plus 1 month"

ExpiresByType audio/x-wav "now plus 1 month"

# Movie files expiration: 1 month after request

ExpiresByType application/x-shockwave-flash "now plus 1 month"

ExpiresByType x-world/x-vrml "now plus 1 month"

ExpiresByType video/x-msvideo "now plus 1 month"

ExpiresByType video/mpeg "now plus 1 month"

ExpiresByType video/mp4 "now plus 1 month"

ExpiresByType video/quicktime "now plus 1 month"

ExpiresByType video/x-la-asf "now plus 1 month"

ExpiresByType video/x-ms-asf "now plus 1 month"

4) Уменьшите размер изображений

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

  • Никогда не используйте большие изображения, уменьшая их с помощью HTML. Браузеру требуется время, чтобы их обработать и качество изображения будет хуже оригинала.
  • Всегда оптимизируйте изображения. Такие приложения, как Adobe Photoshop или онлайн сервис Smush It, могут с помощью своих инструментов легко уменьшить размер картинки без потери качества.
  • Не добавляйте слишком много изображений на одну страницу. Если у Вас в статье много фотографий, попробуйте разбить ее на страницы.

5) Удалите неиспользуемые и неоптимизированные расширения

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

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

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

6) Используйте расширения для оптимизации

Существует много расширений, которые пытаются увеличить производительность сайта. Полагаясь на многолетний опыт работы с Joomla, вот небольшая подборка, которую мы Вам порекомендуем:

  • JCH Optimize – комбинирует JavaScript & CSS, объединяет изображения в спрайты, уменьшает и сжимает JavaScript. Платная JCH Optimize PRO версия есть в нашей складчине.
  • Jbetolo – все, что умеет JCH Optimize плюс еще поддержка CDN
  • JotCache – улучшает систему кэширования в Joomla
  • Cache Cleaner – просто чистит кэш из панели администрирования Joomla