Кэширование данных в Bitrix D7: ускоряем выдачу

**Bitrix D7: быстрый пример кэширования данных через Bitrix\Main\Data\Cache — снижаем нагрузку на БД и ускоряем Highload-выдачу**

Мини-сниппет демонстрирует классическую схему «попытка-загрузить-из-кэша → тяжёлый ORM-запрос → сохранение результата». За один проход создаём экземпляр Cache, задаём TTL, id и каталог, а затем либо достаём готовый массив, либо выполняем запрос к HighloadBlockTable и пишем результат в /bitrix/cache. Такой подход мгновенно уменьшает число обращений к базе, ускоряет рендеринг страниц Bitrix и легко масштабируется на любые ресурсоёмкие вычисления.
<?php
use Bitrix\Main\Data\Cache;

$cacheTime = 3600;               // время жизни в секундах
$cacheId   = 'my_custom_cache';  // уникальный идентификатор
$cacheDir  = '/my/snippets/';    // папка в /bitrix/cache

$cache = Cache::createInstance();

if ($cache->initCache($cacheTime, $cacheId, $cacheDir)) {
    // данные из кэша
    $data = $cache->getVars();
} elseif ($cache->startDataCache()) {
    // здесь выполняем «тяжёлый» код, например ORM‑запрос
    $data = [
        'items' => \Bitrix\Highloadblock\HighloadBlockTable::getList([
            'filter' => ['=NAME' => 'MyBlock'],
            'select' => ['ID', 'UF_*'],
        ])->fetchAll()
    ];

    // сохраняем результат в кэш
    $cache->endDataCache($data);
}

// дальше работаем с $data
foreach ($data['items'] as $item) {
    echo $item['UF_NAME'], "\n";
}