Композитный сайт - включение, динамические области, сброс
Включаем композит без чужих имён в шапке: проверяем отдачу, помечаем личные блоки и разбираемся, чем сбрасывать готовые копии.
Решение
Проверяем, отдана ли страница из статики:
curl -sI https://example.org/catalog/ | grep -i x-bitrix-composite# Cache (dynamic) - страница взята из готовой копии# заголовка нет вовсе - композит на этой странице не сработал# счётчики показов внутри копии не растут: код на таком хите не выполняетсяСлужебный заголовок ответа сервера отвечает на главный вопрос сразу. Замер делают на втором обращении: первое собирает копию и по времени ничем не отличается от обычной страницы.
Помечаем личный блок в шаблоне компонента:
$frame = $this->createFrame()->begin(''); // здесь можно оставить заглушку?><span class="cart-count"><?= $arResult['ITEMS_COUNT'] ?></span><?php$frame->end();// содержимое области придёт вторым запросом, уже персональноДинамическая область вырезается из общей копии страницы и догружается отдельным запросом. Всё, что отличается у двух посетителей - корзина, имя, отложенные товары, - обязано быть внутри такой области.
Догружаем произвольный участок страницы:
$APPLICATION->AddBufferContent(function () { global $USER; return $USER->IsAuthorized() ? 'Здравствуйте, ' . $USER->GetFullName() : 'Войти';});// функция выполняется после сборки страницы, поэтому в статику её результат не попадаетОтложенный буфер закрывает те случаи, до которых компоненты не дотягиваются. Он же выручает там, где личное вставлено прямо в шаблон сайта и переносить его в компонент дороже, чем пометить.
Сбрасываем композитные копии:
$cache = \Bitrix\Main\Data\StaticHtmlCache::getInstance();$cache->deleteEntry('/catalog/'); // одна страница$cache->deleteAll(); // и всё разом, если менялся шаблон сайта// то же самое доступно кнопкой в настройках модуля композита// счётчики и события аналитики тоже переносят в динамические областиКомпозитные копии страниц живут отдельно от кэша компонентов. Сброс кэша компонентов их не трогает, и правка шаблона сайта доезжает до посетителя только после этого шага.
Включать композит стоит после того, как страница уже быстрая без него. На медленной странице он маскирует причину: посетителю быстро, а первый заход и любой сброс возвращают исходную секунду ожидания.
Личные данные проверяют не на глаз, а двумя разными браузерами. Достаточно открыть страницу гостем и авторизованным пользователем подряд, чтобы увидеть чужое имя в шапке, если область не помечена.
Композит спорит со счётчиками и с разметкой, зависящей от самого посетителя. Всё, что считает показы или подставляет город, переносят в динамические области заранее.
Список динамических областей стоит записать рядом с шаблоном сайта. Через месяц новый блок в шапке добавит человек, который про композит не помнит, и найдёт эту запись раньше, чем чужое имя увидит посетитель.
Типичные проблемы
Гость видит имя другого пользователя.
Личный блок с данными посетителя попал в общую копию страницы для всех. Каждое такое место на странице объявляют отдельной динамической областью.
Число товаров в корзине не меняется.
Счётчик корзины попал в общую статику и отдаётся всем посетителям одним и тем же. Счётчик обязан приходить вторым запросом, уже после показа страницы.
Правка шаблона не видна на сайте.
Страница отдаётся посетителю из композитной копии, собранной ещё до вашей правки шаблона. Композитные копии страниц сбрасывают отдельно от кэша самих компонентов.
Композит не срабатывает на нужной странице.
Код страницы отдаёт свои заголовки или пишет в сессию. Такие страницы платформа в композитную статику не кладёт и собирает их каждый раз.
Статистика показов просела после включения.
Счётчик стоит в статической части и не выполняется при отдаче копии. Такой счётчик переносят внутрь динамической области вместе с его разметкой.
Частые вопросы
Сколько места занимают композитные копии?
На каталоге с фильтром - заметно много: копия на каждую комбинацию. Объём стоит смотреть после первой недели.
Работает ли композит для авторизованных?
Да, общая часть страницы отдаётся так же. Личное при этом обязано быть в динамических областях.
Как отключить композит на одной странице?
Настройкой модуля по маске адреса. Точечное отключение честнее, чем попытка пометить на ней всё подряд.
Что делать со страницами оформления заказа?
Оставлять их вне композита. Они целиком личные, и выигрыша там нет.
Смежное
- Композит на практике - оглавление подтемы
- Персональные рекомендации: блок на витрине, данные, проверка - типовая динамическая область витрины
- Композитный сайт - устройство технологии
- Правка не видна на сайте: три уровня кэша - что сбрасывать и в каком порядке
- A/B-тест на витрине: варианты, доли, цели, результаты - страницы, которые исключают из кэша
- Шаблоны и композит - как это выглядит в шаблоне
- Производительность - устройство темы целиком
- Композит не включается на странице: причины по убыванию частоты - если копии не появляются
- Электронная торговля в аналитике: события, покупка, сверка - типовая жертва кэша страниц
- Таргетинг и статистика баннеров: ключевые слова, показы, переходы - почему композит занижает счётчики показов
- Композит изнутри: статическая копия, зоны, пересборка - что происходит внутри при этих настройках