Использование кэша в экосистеме Cotonti
Популярные запросы: тема Omnis, плагин Pagelist, Cotonti 0.9.25, ЧПУ, Font Face
- 120 просмотров
- 21 января, 2025
- Обновлено: 3 марта, 2025
- admin
- Время чтения: 6 минут
- 1 (Подробно)
Кэширование – это полезный и важный инструмент, необходимый для решения задач по оптимизации страниц и увеличению скорости их загрузки. На этапе разработки сайта кэш обычно отключают, а окончательно тестируют и задействуют уже на действующем проекте.
Кэширование объектов в CMS Cotonti Siena
Движок Котонти предлагает разработчику три основных типа кэша:
- memory cache,
- disk cache (static & XTPL).
В первом случае данные кэшируются и записываются в специально отведенную для этого таблицу cot_cache SQL-базы данных. Во втором случае кэшированные данные записываются на диск. Существует два подтипа дискового кэша – статический и XTPL-кэш. По умолчанию для них выделяются соответственно и две папки:
datas/cache/static datas/cache/templates
В терминологии Котонти типы кэша именуются как:
- cache (он же memory cache),
- static cache (статический кэш трех видов для неавторизованных пользователей),
- XTPL cache (механизм кэширования шаблонов).
Таким образом, в распоряжении разработчика сайтов на движке Котонти находятся сразу три способа кэширования данных. В чем их различия и как их лучше всего применять?
Зачем нужны три вида кэша в Cotonti
Использование механизмов кэширования в CMS Cotonti Siena не является жестко регламентированным, хотя существуют определенные рекомендации. Все зависит от особенностей разрабатываемого сайта, и в одних случаях использование того или иного вида кэша может быть необходимым и эффективным, а в других просто невозможным. Рассмотрим три вида кэша подробно.
Кэширование в базу данных
Данный вид кэша чаще всего используется при формировании виджетов плагинами Recent Items, Pagelist и им подобными. Это могут быть такие блоки, как, например:
- популярные страницы,
- новые (или обновленные) страницы,
- Топ-10 товаров и проч.
Очевидно, что в таких случаях часто используются SQL-запросы, причем их сложность (например, присутствие вложенных запросов) позволяет предположить определенную степень нагрузки на SQL-сервер и – как следствие – влияние на скорость формирования и загрузки страниц. К тому же, если таки виджеты выводятся в нескольких локациях, использование одинаковых запросов и формирование одинаковых блоков “вживую” становится еще более нерациональным.
В подобных ситуациях можно использовать кэширование, при котором указанные выше блоки (а точнее полностью сформированный контент в виде готовой HTML-разметки) создается и записывается в таблицу cot_cache базы данных на определенный разработчиком срок. Вам лишь необходимо указать два основных параметра:
- имя записи в таблице,
- срок ее хранения.
Теперь для формирования подобных виджетов можно использовать следующий алгоритм:
-
Кэш включен?
- Запрашиваем наличие в таблице кэша записи с требуемым именем.
- Если такая запись существует, передаем ее в переменную или TPL-тег и выводим в шаблоне.
- Если запись еще не создана, создаем ее, передаем в переменную или TPL-тег и выводим в шаблоне.
-
Кэш выключен?
- Формируем виджет “вживую”.
Таким образом, при использовании memory cache вместо выполнения SQL-запросов уже готовый контентный блок может быть выбран из таблицы cot_cache и вставлен в соответствующую ему позицию TPL-шаблона.
Пример реализации внутреннего кэширования (memory cache)
if (Cot::$cache && !empty($cache_name) && ((int)$cache_ttl > 0) && Cot::$cache->db->exists($cache_name, MY_CACHE_REALM)) {
$output = Cot::$cache->db->get($cache_name, MY_CACHE_REALM);
} else {
// Формируем HTML-код
if (Cot::$cache) {
Cot::$cache->db->store($cache_name, $output, MY_CACHE_REALM, (int)$cache_ttl);
}
}
Кроме этого, быстрый memory cache используется системой для записи, хранения и быстрого доступа к настройкам сайта. Логика работы здесь еще проще: при включении кэша все настройки сохраняются в соответствующих записях таблицы cot_cache, например cot_cfg или structure. Идентифицировать их можно по имени раздела – system. При использовании memory cache в собственных расширениях желательно избегать данного имени раздела.
XTPL-кэш
Это один из двух видов дискового кэша в Cotonti. Его задача – кэширование TPL-тегов и оптимизация работы с логическими блоками.
TPL-шаблон является неотъемлемым элементом темы оформления, а шаблонизатор coTemplate – одним из главных потребителей ресурсов. Поэтому рекомендуется активировать XTPL-кэш на любом действующем сайте.
Вместе с тем, при выполнении работ по техподдержке “живого” сайта не забывайте очищать кэш при внесении изменений в шаблоны.
Static Cache
Самым радикальным видом кэширования, доступным в Cotonti Siena, является так называемый статический кэш (static cache). С его помощью можно кэшировать страницы целиком. По умолчанию в файле настроек config.php вы можете задействовать static cache для:
- главной страницы,
- разделов и страниц модуля page,
- разделов и страниц модуля forums.
Статический кэш работает только для незарегистрированных пользователей (aka guests). Если вы авторизованы, данный вид кэша для вас не будет задействован.
Если это позволяет логика работы вашего сайта, статический кэш максимально увеличит скорость загрузки сайта, отдавая пользователю готовые страницы целиком.
Очистка кэша
При возникновении необходимости во внесении изменений в шаблон(ы) и – соответственно – в выводимую разметку страниц, необходимо убедиться в том, что кэшированный контент отдается пользователю в обновленном виде. Для этого необходимо:
- Отключить кэш частично или полностью.
- Очистить кэш частично или полностью.
- Внести необходимые изменения.
- Включить кэш.
- Проверить результат работы.
Поскольку разработчик чаще всего работает под администраторским логином, необходимо помнить о том, что в таких ситуациях кэш может быть отключен. Это возможно если:
- Речь идет о статическом кэше для авторизованных пользователей.
- Разработчик отключил кэширование для авторизованных пользователей или администраторов.
Таким образом, при использовании кэширования рекомендуем проверить результат внесения изменений при отсутствии авторизации, например, в режиме инкогнито вашего браузера.
Отключение кэширования
Отключение кэширования – это нечастый, но полезный прием, который необходимо знать и использовать при необходимости. В каких ситуациях это может понадобиться?
Например, вам необходимо использовать статический кэш и при этом в отдельных локациях часто (например, ежечасно) обновлять контент. В таких случаях необходимо создать плагин (или использовать соответствующую часть проектного плагина), где сконфигурировать исключение.
Логика отключения кэширования следующая:
- Запрещаем кэширование требуемой страницы или раздела.
- Очищаем кэш полностью или “точечно”.
Теперь при отсутствии закэшированной страницы она будет формироваться “вживую” и после создания не будет кэшироваться. Таким образом наша цель будет достигнута.
Если речь идет только об отключении статического кэша, то другие виды кэширования будут доступны, и отдельные блоки разметки будут отдаваться пользователю в готовом виде из дискового или memory кэша.
Пример реализации отключенного кэша
Например, вам необходимо отключить кэширование раздела contacts и вложенных в него страниц. Для этого создадим или используем часть плагина с хуком page.list.tags и внесем в нее следующий код:
<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=page.list.tags
[END_COT_EXT]
==================== */
defined('COT_CODE') or die('Wrong URL.');
($c == 'contacts') && Cot::$cfg['cache_page'] = false;
Теперь займемся страницами. Хук будет page.tags:
<?php
/* ====================
[BEGIN_COT_EXT]
Hooks=page.tags
[END_COT_EXT]
==================== */
defined('COT_CODE') or die('Wrong URL.');
($c == 'contacts') && $pageStaticCacheEnabled = false;
Использование переменной $pageStaticCacheEnabled конечно же нагляднее: в следующем релизе Cotonti Siena аналогичные переменные будут добавлены для разделов и других локаций.
Таким образом мы отключили кэширование в разделе contacts, включая его страницы. Теперь данный контент будет всегда отдаваться клиенту “как есть”, со всеми обновлениями. Не забудьте полностью очистить static cache из “админки” или удалите папку datas/cache/static/contacts.
Выводы и заключение
Кэширование это мощный инструмент, позволяющий разработчику сайта оптимизировать такой важный фактор SEO, как скорость загрузки страницы. Благодаря наличию в CMS Cotonti сразу трех видов кэша вы сможете снизить нагрузку на сервер и ускорить выдачу страниц, причем сделать это максимально гибко и без ущерба функционалу вашего проекта.
В прошлый раз мы разбирались с настройкой Git на удаленном хостинге.
Правильный вопрос, но в каждом конкретном случае лучше всего использовать эмпирический метод и опытным путем определять что работает быстрее.
Спасибо за статью. Но все же большой вопрос – что лучше (быстрее):
Новый комментарий
Ошибка
Выполнено