Инструкция по настройке Композита

"Композитный сайт" - это технология, запатентованная компанией 1С Битрикс. Принцип ее работы: выдавать пользователю страницу из быстрого(html) кэша и при загрузке обновлять нужные блоки асинхронными запросами(ajax).

Цель композитного кэширования - ускорение работы сайта. Скорость открытия страниц важна для пользователя и для сканирования веб-ресурса поисковыми роботами яндекса и гугла.

1. Делаем настройки в админке
В административном режиме переходим на страницу настроек Композитного сайта: Настройки -> Настройки продукта -> Композитный сайт
Включаем кнопку Композит.


Устанавливаем значения полей:
Хранить кеш: можно оставить в файлах

Список доменных имен (каждое в новой строке): укажите свой домен, если настроена многосайтовость, то несколько доменов.

Маска включения: *.php;*.html;*/;* - указываем, что кэшировать будем все url, которые заканчиваются на ".php", ".html" или "/".

Маска исключения: не все страницы нужно композитить, это касается служебных страниц и страниц с ограниченным доступом. Если они попадут в кэш, то будут доступны всем, поэтому указываем страницы-исключения.

Сохранять на диск только страницы без параметров: если кэшировать страницы с параметрами - нужно выделять большый объем памяти под файлы кэша, т.к адресов с get-параметрами может быть много, их генерируют фильтры, сортировка, постраничная навигация и т.д. Если у вас есть несколько свободных гигов, можно не ставить галочку.

Дисковая квота (мегабайт): в зависимости от проекта, можно поставить 100 или 100000 мегабайт; для среднего магазина на 3-4 тысячи товаров достаточно 5Гб. Если вы установите меньшую квоту чем требуется, файлы композитного кэша не будут сохраняться после превышения квоты.


2. Включаем логи
Вторым шагом включим константы в /bitrix/php_interface/dbconn.php, они нам потребуются для отладки, в файле log.txt будут сохраняться записи об ошибках и успешном создании композитного кэша страницы.
Для этого переходим: Контент -> Структура сайта -> Файлы и папки -> bitrix -> php_interface .
Находим файл dbconn.php и нажимаем Редактировать как PHP
Далее устанавливаем в конце файла эти две сточки:

define( "BX_COMPOSITE_DEBUG", true );
define( "LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt" );
Сохраняем.


3. Настройка компонентов
Теперь самое интересное. Компоненты сайта будем делить на статические и динамические.
Статические - которые выдают одинаковый код для любого пользователя. Например, это может быть меню каталога (bitrix:menu), список разделов(catalog.section.list), список новостей(news.list), детальная страница новости(news.detail) и т.д 

Для таких компонентов, в шаблонах, после объявления пролога включаем композит:
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$this->setFrameMode(true); 

В метод setFrameMode можно передать true или false, соответственно включить и отключить композит.

Динамические компоненты нужно обновлять для каждого пользователя. К таким компонентам относятся малая корзина(bitrix:sale.basket.basket.line) или форма авторизации(bitrix:system.auth.form). Если, к примеру, мы не обновим блок корзины, то он выдаст нам информацию из кэша. А зачем пользователю чужая корзина? Для шаблонов динамических компонентов код выглядит так:
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$this->setFrameMode(true);
$this->createFrame()->begin('');


Теперь, если мы хотим кэшировать компоненту, но не полностью, а частично, например, хотим обновлять цены в списке элементов (bitrix:catalog.section)
 
$frame = $this->createFrame('price-index', false)->begin() echo $arFields[PRICES][BASE][PRINT_VALUE_VAT]; $frame->beginStub() echo 'руб.'; $frame->end()
, тогда при загрузке сайта пользователь увидит
 
руб.		
, а после обновления асинхронным запросом увидит то, что возвращает
 
echo $arFields[PRICES][BASE][PRINT_VALUE_VAT];	


Если нам нужно закэшировать часть кода вне компоненты, например, в шаблоне сайта, используем такой код:
\Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("user-block");
if( !$GLOBALS["USER"]->IsAuthorized() ){
    echo 'Авторизация';
}else{
    echo 'Мой профиль';
}
\Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("user-block", "");


В большинстве случаев, для настройки "Композитного сайта" этого достаточно.

Также можно применить:

6. Используем кэш браузера. Подгружает статику с прошлого хита (для малой корзины)
$frame=$this->createFrame()->begin('');
$frame->setBrowserStorage(true); 	 

7. Использование анимации для баннера (плавное появление контента)
$frame = $this->createFrame('top_banner')->begin(''); $frame->setAnimation(true);
4. Отладка
Когда вы установите для всех шаблонов компонентов настройки для композита, можно проверить страницу. Для этого откройте ее в браузере под не авторизованным пользователем и посмотрите: в подвале должен появиться баннер "Быстро с 1С Битрикс".
Если такой баннер не появился, то смотрим файл логов, он находится в корне сайта и называется log.txt.
В нем будут указаны компоненты, для которых не настроено композитное кэширование.

Если все-таки у вас возникнут проблемы с настройкой Композитного сайта - обращайтесь, помогу.



19.02.2016

Семен Голиков.