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