Кэширование данных в 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";
}