Любой производительный сайт на Битрикс активно использует кэширование. Это позволяет избежать повторного выполнения «тяжелых» операций (например, запросов к базе данных) и отдавать пользователю заранее сохраненный результат. В Битрикс есть два основных способа работы с кэшем: классический (CPHPCache) и современный, на ядре D7 (Bitrix\Main\Data\Cache).
Основной принцип кэширования
Логика работы в обоих случаях практически идентична и состоит из трех шагов:
- Проверить, есть ли валидный кэш. Если да, то взять данные из него.
- Если кэша нет, начать его запись. Выполнить «тяжелые» операции и получить нужные данные.
- Завершить запись кэша, сохранив полученные данные для будущих обращений.
Часть 1. Классический подход (CPHPCache)
Этот способ используется в старом API и до сих пор актуален во многих компонентах и скриптах.
Логика работы:
$cacheTime = 3600; // Время жизни кэша в секундах (1 час)
$cacheId = 'my_unique_cache_id_'.serialize($arParams); // Уникальный ID кэша
$cacheDir = '/my_cache_dir/'; // Директория для хранения файлов кэша
$obCache = new CPHPCache();
// 1. Пытаемся получить данные из кэша
if ($obCache->InitCache($cacheTime, $cacheId, $cacheDir)) {
$vars = $obCache->GetVars();
$arResult = $vars['AR_RESULT']; // Извлекаем наши сохраненные данные
}
// 2. Если кэша нет, начинаем его запись
elseif ($obCache->StartDataCache()) {
// --- Здесь идет "тяжелая" логика ---
// Например, выборка элементов из инфоблока
$arResult = [];
$rsElements = CIBlockElement::GetList(...);
while($arElement = $rsElements->Fetch()){
$arResult[] = $arElement;
}
// ------------------------------------
// 3. Сохраняем результат в кэш
$obCache->EndDataCache(['AR_RESULT' => $arResult]);
}
// Теперь в $arResult у нас есть данные, либо из кэша, либо "свежие"
print_r($arResult);
Ключевые моменты:
- $cacheId: Должен быть уникальным для каждого набора параметров. Если параметры меняются, ID кэша тоже должен меняться, иначе вы получите старые данные. Часто для этого используют serialize($arParams).
- $cacheDir: Помогает организовать файлы кэша в структурированные папки.
Часть 2. Современный подход (Bitrix\Main\Data\Cache)
Синтаксис D7 более лаконичен и соответствует современным стандартам PHP.
Логика работы:
use Bitrix\Main\Data\Cache;
$cacheTime = 3600;
$cacheId = 'my_unique_cache_id_d7_'.serialize($someParams);
$cacheDir = '/my_cache_dir_d7/';
$cache = Cache::createInstance(); // Создаем объект кэша
if ($cache->initCache($cacheTime, $cacheId, $cacheDir)) {
$arResult = $cache->getVars(); // Получаем переменные из кэша
}
elseif ($cache->startDataCache()) {
// --- "Тяжелая" логика на D7 ORM ---
$arResult = [];
$result = \Bitrix\Iblock\ElementTable::getList(...);
while ($row = $result->fetch()) {
$arResult[] = $row;
}
// ----------------------------------
// Проверка на случай, если данные не найдены (чтобы не создавать пустой кэш)
if (empty($arResult)) {
$cache->abortDataCache();
}
$cache->endDataCache($arResult); // Сохраняем массив напрямую
}
print_r($arResult);
Как видите, логика абсолютно та же. Разница в основном в создании объекта (new CPHPCache() vs Cache::createInstance()) и методах (GetVars vs getVars, StartDataCache vs startDataCache). D7 версия выглядит немного чище и не требует оборачивать результат в дополнительный массив.
Управление кэшем
- Прервать кэширование: Если в процессе получения данных вы поняли, что кэшировать нечего (например, выборка пустая), вызовите $cache->abortDataCache(). Это предотвратит создание пустого файла кэша.
- Сброс кэша: Для ручного сброса кэша можно просто удалить соответствующий файл или папку ($cacheDir) на сервере.
- Тегированный кэш: Для умного сброса кэша (например, сбросить кэш списка новостей при добавлении новой) используется механизм тегированного кэширования (TaggedCache). Это более продвинутая тема, но ее стоит изучить для создания по-настоящему быстрых сайтов.
Заключение:
Неважно, какой способ вы выберете, — главное кэшировать. Для новых проектов предпочтительнее использовать Bitrix\Main\Data\Cache, так как он соответствует современному стилю D7. Для поддержки старого кода знание CPHPCache обязательно. Правильное кэширование — самый простой и эффективный способ ускорить ваш сайт на Битрикс.
Кэширование Битрикс, CPHPCache, Bitrix\Main\Data\Cache, initCache, startDataCache, getVars, endDataCache, производительность Битрикс, тегированный кеш.