Эффективное кэширование в Bitrix D7: простой и тегированный кэш
Кэширование — один из ключевых инструментов повышения производительности проектов на Bitrix. В этой статье рассмотрим, как правильно использовать стандартные механизмы кэширования в Bitrix D7, включая простой и тегированный кэш, а также кэш при работе с ORM.
Зачем нужно кэширование?
Bitrix — мощная CMS, но при интенсивной нагрузке даже она требует оптимизации. Один из лучших способов ускорить работу сайта — минимизировать обращения к базе данных и тяжелые вычисления, сохраняя результаты в кэше.
Простой кэш с использованием Bitrix\Main\Data\Cache
Простой кэш хорошо подходит для любых вычислений или запросов, результат которых редко меняется.
use Bitrix\Main\Data\Cache; $cache = Cache::createInstance(); $cacheTime = 7200; // 2 часа $cacheId = 'blog-tags'; $cacheDir = '/custom/blog-tags/'; if ($cache->initCache($cacheTime, $cacheId, $cacheDir)) { // Кэш есть — получаем результат $vars = $cache->getVars(); $this->arResult = $vars['result']; } elseif ($cache->startDataCache()) { // Кэш отсутствует — выполняем тяжелые действия $this->arResult['tags'] = ['content']; // Пример данных $cache->endDataCache(['result' => $this->arResult]); }
Кэш при использовании ORM D7
В Bitrix ORM (D7) кэширование можно указать прямо в параметрах getList
.
use Bitrix\Main\GroupTable; $res = GroupTable::getList([ 'select' => ['ID', 'NAME'], 'order' => ['C_SORT' => 'ASC'], 'cache' => [ 'ttl' => 3600, // 1 час 'cache_joins' => true, // если есть JOIN ], ]);
Этот подход автоматически кеширует результат ORM-запроса.
Тегированный кэш: гибкий и управляемый
Тегированный кэш нужен, когда данные могут измениться при обновлении конкретного контента (например, инфоблока). С его помощью можно удалять кэш точечно, по тегу
use Bitrix\Main\Data\Cache; use Bitrix\Main\Application; $cache = Cache::createInstance(); $cacheTime = 7200; $cacheId = 'blog-tags'; $cacheDir = '/custom/blog-tags/'; $taggedCache = Application::getInstance()->getTaggedCache(); if ($cache->initCache($cacheTime, $cacheId, $cacheDir)) { $vars = $cache->getVars(); $this->arResult = $vars['result']; } elseif ($cache->startDataCache()) { // Начало тегирования $taggedCache->startTagCache($cacheDir); $taggedCache->registerTag('iblock_id_4'); // Привязка к инфоблоку $taggedCache->endTagCache(); $this->arResult['tags'] = ['content']; // Пример данных $cache->endDataCache(['result' => $this->arResult]); }
Если элемент инфоблока будет обновлён, кэш с этим тегом сбросится.
Кэширование — необходимый элемент при разработке производительного проекта на 1C-Bitrix. Используя как простой, так и тегированный кэш, вы можете значительно сократить нагрузку на сервер и ускорить отклик сайта. Применяйте подходящий вид кэша в зависимости от сценария, и вы добьётесь ощутимого прироста производительности.