Кеширование в Bitrix - Сергей Житников: Web-разработчик

Кеширование в Bitrix

Работать с кешем в Bitrix достаточно просто. Можно делать следующее:

  • Записывать данные в кеш
  • Извлекать данные из кеша
  • Определять время кеширования (при записи)
  • Удалять кешированные данные

В старом ядре, для работы с кешем можно использовать объект класса CPHPCache. В D7 — класс \Bitrix\Main\Data\Cache

Работа с кешем в старом ядре Bitrix

Описание аргументов метода InitCache (из документации):

/**
 * @access public
 * @param mixed $TTL Время жизни кеша в секундах.
 * @param mixed $uniqueString Уникальный идентификатор кеша.
 * @param bool $initDir (default: false) Папка, в которой хранится кеш, относительно /bitrix/cache/
 * @param string $baseDir (default: "cache") Базовая директория кеша. По умолчанию равен cache
 * @return bool true, если кеш валидный
 */
public function initCache($TTL, $uniqueString, $initDir = false, $baseDir = "cache")

Простой пример работы с кешем в старом ядре:

$cacheId = 'cach_id'; // Идентификатор кеша
$lifeTime = 120*60; // 2 часа
$cacheDir = '/cache_dir/'; //Будем искать кеш в папке bitrix/cache (хоят можно задать и другие папки  - для удобства использования кеша)

$obCache = new CPHPCache();
if($obCache->InitCache($lifeTime, $cacheId, $cacheDir))// Если кэш найден
{
    $links = $obCache->GetVars(); // Если в указанной папке нашлись кешированные данные по идентификатору кеша, извлекаем данные из кэша и сохраняем в $links
    $obCache->Output(); // Выводим на экран содержимое кеша
}
elseif($obCache->StartDataCache()) // Если кэш не найден
{
    if($links = getData()) {
        $obCache->EndDataCache($links);// Сохраняем переменные в кэш.
    }
}

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

$cacheDir = '/cache_dir';
$path = $_SERVER["DOCUMENT_ROOT"]."/bitrix/cache".$cacheDir; // Важно указать полный путь к файлу кеша

if($handle = @opendir($cacheDir)) // Открываем директорию для чтения
{
    while(($file = readdir($handle)) !== false)
    {
        if($file == "." || $file == "..") continue; // Пропускаем текущий и родительский каталоги
        if(!is_dir($path."/".$file)) // Проверяем, является ли файл директорией
        {
            if(substr($file, -5)==".html") // Если расширение файла .html, проверяем, истек ли срок его кэширования
                $expired = CPageCache::IsCacheExpired($path."/".$file); // Вернет булево значение, CPageCache - для работы с HTML файлами
            elseif(substr($file, -4)==".php") // Если расширение файла .php, проверяем, истек ли срок его кэширования
                $expired = CPHPCache::IsCacheExpired($path."/".$file); // Вернет булево значение, CPHPCache - для работы с php файлами
        }
    }
}

Можно очистить кеш с помощью метода CleanDir:

$cacheDir = '/cache_dir/';
$path = $_SERVER["DOCUMENT_ROOT"]."/bitrix/cache/".$cacheDir; // Важно указать полный путь к файлу кеша

$obCache = new CPHPCache();
$obCache->CleanDir(false, $path); // Параметры: рекурсивное удаление данных в указанной директории; путь к директории

Первый параметр в методе CleanDir() отвечает за рекурсивное удаление всех файлов и поддиректорий в указанной директории.
Значение этого параметра равно:

  • true — будут удалены все файлы и поддиректории в указанной директории и всех ее поддиректориях.
  • false — будут удалены только файлы и поддиректории, находящиеся непосредственно в указанной директории

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

Работа с кешем в новом ядре Bitrix

В D7 работа с кешем несколько усовершенствована. Появился простой (simple) и управляемый (managed) кеш.

  1. Простой кеш – это кеш, в котором данные хранятся на протяжении всего времени жизни скрипта. Кэширование выполняется за счет сохранения данных в оперативной памяти сервера. Простой кеш в Bitrix D7 реализован с помощью класса Bitrix\Main\Data\Cache. Здесь нет дополнительных функций управления или обновления данных.
  2. Управляемый кеш – это кеш, который позволяет сохранять данные не только в оперативной памяти, но и в других местах, таких как база данных или файловая система. Управляемый кеш позволяет более гибко управлять хранением и обновлением кэшированных данных. В Bitrix D7 управляемый кеш реализован с помощью класса Bitrix\Main\Data\ManagedCache.
    Предоставляет мощные возможности для контроля и обновления кэшированных данных, а также более гибкую настройку и использование разных типов данных и хранилищ

Простой кеш

Пример работы с простым кешем в D7:

use \Bitrix\Main\Data\Cache;

$cache = Cache::createInstance(); // получаем экземпляр класса
if ($cache->initCache(3600, "cache_key")) { // проверяем кеш и задаём настройки
    $vars = $cache->getVars();
}
elseif ($cache->startDataCache()) {
    // некоторые действия...
    $cache->endDataCache(array("key" => "value")); // записываем в кеш
}

Когда метод initCache() возвращает true, это указывает на то, что данные уже находятся в кеше и их можно получить с помощью метода getVars(). Метод getVars() возвращает массив данных из кеша, который был сохранен с использованием метода endDataCache().

Сергей Житников
Об авторе

Сергей Житников - Веб-разработчик

Занимаюсь веб-разработкой более 5 лет. Специализируюсь на создании адаптивных сайтов и веб-приложений на HTML5, CSS3 и JavaScript. Работаю с популярными CMS и фреймворками, а также уделяю большое внимание оптимизации производительности и чистоте кода.

Есть проект или идея? Буду рад помочь!

Связаться со мной

Последние статьи

19.06.2026
В статье собрал шпаргалку по основным компонентам Bitrix: bitrix:menu, news.list, news.detail, sale.basket.basket.line, main.include и breadcrumb. Разобрал настройку меню из разделов и элементов инфоблока через файлы .menu_ext.php, показываю полные конфигурации компонентов с пояснениями ключевых параметров. Готовые примеры для быстрого копирования и использования в проектах.
19.06.2026
Купоны в Битрикс неразрывно связаны с правилами работы с корзиной — без привязки к правилу они не сработают, а правило без купонов применит скидку на все товары. Разбираю создание купонов через DiscountCouponTable::add(): обязательные и опциональные поля, типы купонов, флаги активности. Показываю примеры работы с датами через объект DateTime (прибавление дней, месяцев и минут).
19.06.2026
Разбираю готовые примеры работы с изображениями в PHP: сохранение на сервер, вывод в браузер, рисование линий и прямоугольников. Отдельно — нюансы с форматами файлов (JPEG/PNG) и поддержкой кириллицы через шрифты.