Архитектурные особенности кэширования в компонентах
При работе со стандартным компонентом bitrix:news.list (и большинством других D7-компонентов) реализован механизм двойного кэширования:
- HTML-кэш – полный рендеринг шаблона
- Data-кэш – сериализованные данные компонента (ограниченный набор ключей
$arResult)
По умолчанию кэшируются только базовые ключи (ID элементов, навигация). Пользовательские данные требуют явного объявления.
Решение проблемы передачи кастомных данных
Для экспорта произвольных данных из шаблона в component_epilog.php необходимо:
-
Инициализировать ключи кэширования\ В
result_modifier.php:<?php // Регистрация ключей для data-кэша $this->__component->SetResultCacheKeys([ 'TEXT', 'CUSTOM_DATA', 'DYNAMIC_VALUE' ]); -
Декларация данных в шаблоне\ В
template.php:<?php $arResult['TEXT'] = 'Hello World!'; $arResult['DYNAMIC_VALUE'] = calculateDynamicValue(); // Произвольная логика -
Доступ в component_epilog.php\ Зарегистрированные ключи доступны через:
<?php $this->arResult['TEXT']; $this->arResult['DYNAMIC_VALUE'];
Технические ограничения и рекомендации
-
Приоритеты кэширования\ Метод
SetResultCacheKeys()должен вызываться до рендеринга шаблона (оптимально – вresult_modifier.php). -
Типы данных\ Поддерживается сериализация:
- Примитивы (string, int, bool)
- Массивы
- Объекты, реализующие
\Serializable
-
Производительность\ Избегайте регистрации неиспользуемых ключей – каждый ключ увеличивает размер data-кэша.
Альтернативный метод через \$arParams
Для передачи простых значений без модификации $arResult:
// result_modifier.php
$component = $this->getComponent();
$component->arParams['CUSTOM_PARAM'] = 'Dynamic Value';
// component_epilog.php
$customValue = $this->arParams['CUSTOM_PARAM'];
Особенности реализации:
- Не требует модификации кэш-ключей
- Подходит для передачи служебных флагов и настроек
- Значения не сериализуются – пригодны только для примитивов
Отладка и верификация
-
Проверка кэшированных данных\ Используйте метод дампа в
component_epilog.php:<?php \Bitrix\Main\Diag\Debug::dump($this->arResult); \Bitrix\Main\Diag\Debug::dump($this->arParams); -
Очистка кэша\ При изменении структуры данных:
php /bitrix/php_interface/clear_cache.php
Оптимизация работы с кэшем
-
Динамическое управление TTL
$this->__component->SetResultCacheMaxAge(3600); // В секундах -
Условное кэширование
if ($needCache) { $this->__component->SetResultCacheKeys(['DATA']); } -
Ключи зависимостей
$this->__component->SetResultCacheKeys(['DEPENDENT_KEY']); $this->__component->SetResultCacheDependent($entityId);
Данный подход обеспечивает корректную работу с кэш-механизмами Битрикс, сохраняя гибкость при реализации сложной бизнес-логики в компонентах.