Композитный режим — уникальная технология Битрикс, позволяющая отдавать пользователю статический HTML мгновенно, а динамические данные (корзина, приветствие «Привет, Иван») подгружать фоновым AJAX-запросом.
Чтобы это работало, компоненты должны быть адаптированы.
1. Включение поддержки композита (setFrameMode)
Если ваш компонент выводит одинаковый контент для всех пользователей (например, список новостей), достаточно просто сообщить системе, что он поддерживает композит.
В файле component.php (или class.php):
// В начале executeComponent или component.php
$this->setFrameMode(true);- true: Компонент поддерживает композит. Его HTML будет закэширован в статике.
- false: Компонент не поддерживает композит (по умолчанию). При встрече такого компонента на странице композит для всей страницы будет отключен.
2. Динамические зоны (createFrame)
Если компонент содержит данные, зависящие от пользователя (например, «В корзине 5 товаров»), его нельзя кэшировать целиком. Нужно выделить динамическую зону.
Это делается в шаблоне компонента (template.php).
// template.php
// 1. Создаем фрейм
$frame = $this->createFrame()->begin('Загрузка...');
// 'Загрузка...' - это заглушка, которую увидит пользователь до подгрузки данных.
// Можно передать пустую строку или HTML-скелетон.
?>
<div class="basket-block">
В вашей корзине: <?= $arResult['ITEMS_COUNT'] ?> товаров.
На сумму: <?= $arResult['TOTAL_PRICE'] ?>
</div>
<?
// 2. Закрываем фрейм
$frame->end();
?>Как это работает:
- Битрикс кэширует страницу целиком.
- В месте вызова createFrame в кэш записывается заглушка («Загрузка…»).
- Для каждого пользователя браузер получает статику мгновенно.
- Сразу после этого отправляется фоновый AJAX-запрос к Битриксу.
- Битрикс выполняет компоненты, находит динамические зоны, генерирует для них актуальный HTML (для конкретного Ивана) и отправляет обратно.
- JS на клиенте заменяет заглушку на актуальный HTML.
Динамика без заглушки (stub)
Иногда заглушка не нужна, мы хотим показать «дефолтный» контент (например, кнопку «Войти»), а для авторизованных заменить её на «Профиль».
$frame = $this->createFrame()->begin();
// Контент по умолчанию (попадет в кэш)
?>
<a href="/login/">Войти</a>
<?
$frame->beginStub();
// Контент динамический (придет аяксом и заменит дефолтный)
?>
Привет, <?= $USER->GetFirstName() ?>! <a href="/logout/">Выйти</a>
<?
$frame->end();Вывод:
Адаптация под композит — обязательный шаг для любого компонента.
- Если компонент статичен — $this->setFrameMode(true).
- Если есть личные данные — выделяем их в $this->createFrame().
Это обеспечивает молниеносную загрузку сайта при сохранении персонального контента.
Композит Битрикс, Автокомпозит, setFrameMode, createFrame, динамическая зона, кэширование, ускорение сайта.