Композитный сайт в 1С-Битрикс

Композит (Static HTML Cache) — технология, которая разделяет страницу на «быструю» статическую оболочку и отложенные динамические фрагменты. Браузер получает готовый HTML-файл практически мгновенно, а динамика догружается AJAX-ом уже после первого рендера. В результате метрики TTFB/FP/Core Web Vitals улучшаются в разы.

Композитный сайт в 1С-Битрикс

1. Как это работает

Первый визит

  • ядро собирает страницу как обычно;
  • отмеченные динамические зоны вырезаются;
  • в конец добавляется JS-загрузчик frameCache;
  • итоговый HTML сохраняется в /bitrix/html_pages/....

Повторный визит

  • Nginx/Apache отдаёт файл с диска за ≈20 мс;
  • параллельно JS делает AJAX-запрос /bitrix/tools/composite_data.php, подменяя заглушки свежим HTML.

Заголовок X-Bitrix-Composite: Cache/NCC подсказывает, откуда пришла страница (кэш или генерация).

2. Режимы работы

Режим Когда использовать Что делает
Автокомпозит «Коробка», лендинги, сайты без кастомных шаблонов Система сама помечает все компоненты как динамические; нужно лишь нажать «Включить».
Ручной композит Интернет-магазины, порталы с кастомным JS Разработчик сам определяет границы динамики, TTL и заглушки.

3. Включение технологии

  1. Админ-панель → Настройки → Настройки продукта → Композитный сайт.
  2. Выберите режим и нажмите «Включить».
  3. Настройте:
    • список доменов;
    • параметры URL, игнорируемые при формировании ключа кэша (например, utm_*);
    • тип хранилища (files, memcached, APCu).

После переключения режима обязательно очистите общий и компонентный кэш.

4. Разметка динамических зон

4.1. Внутри шаблона компонента

<?php
$frame = $this->createFrame()->begin();   // начало динамики
?>
    <span id="cart-count"><?=$arResult['COUNT']?></span>
<?php
$frame->beginStub();                      // заглушка
?>
    <span id="cart-count">0</span>
<?php
$frame->end();                            // конец динамики
?>

Метод createFrame() доступен в любом шаблоне компонента Bitrix Framework.

4.2. Вне компонента (шапка, футер)

use Bitrix\Main\Page\Frame;

Frame::getInstance()->startDynamicWithID('header-auth');
  // ... любой PHP/HTML с авторизацией ...
Frame::getInstance()->finishDynamicWithID('header-auth', '');

4.3. Дополнительные возможности

$frame = Bitrix\Main\Page\Frame::getInstance();
$frame->setAutoUpdate(false);     // отключить AJAX-обновление, кэш только по TTL
$frame->setAutoUpdateTTL(120);    // TTL файла-кэша 2 мин

4.4. Если компонент подключает ресурсы <head>

use Bitrix\Main\Page\{FrameStatic, AssetMode};

$area = new FrameStatic('workarea');
$area->setAssetMode(AssetMode::STANDARD);
$area->setStub('<!-- stub -->');

$area->startDynamicArea();
    $APPLICATION->IncludeComponent('my:comp', '.default', []);
$area->finishDynamicArea();

5. Клиентские события frameCache

function initCounters() {
    // ваш код
}

if (window.frameCacheVars) {                // страница из кэша
    BX.addCustomEvent('onFrameDataReceived', initCounters);
} else {
    BX.ready(initCounters);                 // обычная загрузка
}
  • onFrameDataReceivedBefore — до вставки всех блоков;
  • onBeforeDynamicBlockUpdate — перед заменой каждого блока;
  • onFrameDataReceived — после полной подмены.

6. Управление кэшем

  • Очистить все HTML-файлы:
    \Bitrix\Main\Data\StaticHtmlCache::getInstance()->deleteAll();
  • Плановая очистка кроном: /bitrix/modules/main/tools/cron_html_pages.php.
  • Временно отключить композит для URL: добавить ?ncc=1 или вызвать $APPLICATION->SetPageProperty('ncc', 'y');.

7. Частые ошибки и решения

Симптом Причина Исправление
Страница каждый раз пересохраняется Случайные rand(), уникальные ID в HTML Перенесите уникальные фрагменты в динамическую зону
«Прыжок» блока при подмене Высота заглушки ≠ высоте контента Задайте фиксированную высоту или CSS-анимацию
Не работает в IE ≤ 9 Ограничение по поддержке postMessage Для старых браузеров композит автоматически отключён
Цифра корзины «моргает» AJAX успевает позже визуала Храните значение в BX.localStorage и показывайте сразу

8. Ограничения по пользователям

Для гостей ставится cookie _CC; для групп, исключённых из композита, — _NCC. Так можно кешировать только анонимный трафик, оставив персональные разделы (корзина, кабинет) динамичными.

9. Инструменты разработчика

  • Chrome расширение “Bitrix Composite” — подсвечивает состояние кэша и объясняет причину его сброса.
  • Панель «Статистика и отладка» в админке → вкладка «Скорость сайта».
  • Заголовок X-Bitrix-Composite в Network-панели браузера.

10. Мини-конфигурация Nginx

location / {
    try_files /bitrix/html_pages/$host$uri_index@.html $uri $uri/ /index.php?$args;
}

location ~* @\.html$ {
    add_header X-Bitrix-Composite "Cache";
    expires 30m;
}

(Если вы используете BitrixVM ≥ 5.1, этот блок генерируется автоматически.)

11. Когда не стоит включать композит

  • Страницы, полностью зависящие от пользователя: оформление заказа, «Мой профиль», поиск.
  • Контент меняется чаще, чем TTL кэша.
  • Приложения, где важнее точное время полной загрузки тяжёлых JS-бандлов, а не первый рендер.

Итоги

Технология «Композитный сайт» позволяет за пару кликов (или за несколько часов ручной разметки) сократить время первого отображения страницы до десятков миллисекунд, улучшить Core Web Vitals и конверсию. Используйте примеры из этого справочника, контролируйте заголовки и панель отладки — и ваш Bitrix-проект будет «летать», оставаясь динамичным там, где это действительно нужно.

Теги:  композитный сайт, настройка, разработчик, скорость загрузки, производительность, технология

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора

Лендинг

от 3 дней

от 25 000 рублей

Разработка одностраничного сайта на платформе Битрикс

* стоимость зависит от наличия верстки, использования готового решения и т.д.

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.