Bitrix

Кэширование компонентов в 1С-Битрикс

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

Автокэширование в 1с-Битрикс — хорошо развитая и довольно сложная система, позволяющая в разы уменьшить число обращений к базе данных и ускорить выполнение страниц.

Как это работает в компоненте?

Обычный компонент Битрикс состоит из следующих файлов:

  1. component.php — файл с кодом, который формирует данные для шаблона ($arResult) и подключает его. Кроме того, может выполнять какие-либо действия после получения данных. Например, устанавливать заголовок страницы или добавлять пункты в навигационную цепочку.
  2. template.php — файл шаблона. В идеале не содерижит никакой логики, только вывод данных из $arResult. кэшируется html-вывод, т.е. PHP код из этого файла выполнится 1 раз, затем будет возвращаться html до следующего обновления кэша.
  3. result_modifier.php — файл, который подключается до template.php и может менять $arResult. кэшируется так же как и template.php
  4. component_epilog.php — файл, который подключается после template.php. Не кэшируется.

Последние 3 файла относятся к шаблону, предпочтительно редактировать именно их. Component.php в стандартных компонентах изменять нельзя, т.к. есть шанс что правки затрутся после обновления системы. В таких случаях рекомендуется копировать компонент полностью в свое поле имен (свою папку в /bitrix/components/).

Схема работы компонента такая:

  1. Проверка входных данных в component.php
  2. Проверка на наличие валидного (активного) кэша файлов result_modifier.php и template.php. Если кэш валидный, то вывод его, заполнение $arResult и переход к пункту 5.
  3. В случае невалидного кэша производятся необходимые действия для получения данных. По сути — заполняется массив $arResult
  4. Подключение файлов result_modifier.php и template.php, формирование + вывод html, а также «запоминание» этого вывода и части массива $arResult
  5. Подключение файла component_epilog.php
  6. Выполнение остального кода в component.php

Запомните!

Содержимое массива $arResult на разных этапах различается. В result_modifier.php и template.php попадает массив, содержащий ВСЕ данные, которые получены на шаге 3. В файле component_epilog.php и коде компонента, который выполняется после него, доступны данные массива $arResult с ключами, которые были указаны в функции $this->SetResultCacheKeys(Array()).

Отставить комментарий

Ваш электронный адрес не будет опубликован.Обязательные для заполнения поля отмечены *

пять × один =