Россия

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


Статья будет интересна тем, кто решил самостоятельно, без помощи битрикс-программиста настроить Композит.
"Композитный сайт" - это технология, запатентованная компанией 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)
 
createFrame('price-index'.$arFields['ID'], false)->begin() echo $arFields[PRICES][BASE][PRINT_VALUE_VAT]; $frame->beginStub()?> руб. $frame->end() ?>
, тогда при загрузке сайта пользователь увидит
 
руб.	
, а после обновления асинхронным запросом увидит то, что возвращает
 
echo $arFields[PRICES][BASE][PRINT_VALUE_VAT];	


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


В большинстве случаев этого достаточно.

Также можно использовать:

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

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

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


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