Добавить в корзинуПозвонить
Найти в Дзене
Алексей Никитин

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

⚡️ Кэширование данных в Bitrix D7: ускоряем выдачу Работаешь с массивами из Highload‑блоков или собираешь сложные выборки через ORM и замечаешь, что страница тянется слишком долго? Документация про Bitrix\Main\Data\Cache есть, но копировать примеры из старых проектов — не всегда удобно. Используй этот готовый сниппет: оборачивай «тяжёлые» запросы в простой кэш на указанное время и забудь о лишних запросах к БД. <?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_*'], ])

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

Работаешь с массивами из Highload‑блоков или собираешь сложные выборки через ORM и замечаешь, что страница тянется слишком долго? Документация про Bitrix\Main\Data\Cache есть, но копировать примеры из старых проектов — не всегда удобно. Используй этот готовый сниппет: оборачивай «тяжёлые» запросы в простой кэш на указанное время и забудь о лишних запросах к БД.

<?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";

}

💡 При первом вызове скрипт выполнит ORM‑запрос и сохранит результат в /bitrix/cache/my/snippets/. Все последующие запросы в течение часа будут брать данные из кэша без обращения к БД.

🔗 Сниппет на Snipit: https://snipit.ru/#/snippets/6593 — добавь в «Избранное», чтобы всегда иметь под рукой готовую схему кэширования в Bitrix D7.

#Bitrix #PHP #D7 #Caching #Highload #Performance