1. Главная
  2. Блог
  3. Полезные статьи
  4. Инструкция по настройке Композита

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

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

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

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

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

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

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

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

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

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

?

1
2
define( "BX_COMPOSITE_DEBUG", true );
define( "LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt" );



Сохраняем. 


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

Для таких компонентов, в шаблонах, после объявления пролога включаем композит:?

1
2
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). Если, к примеру, мы не обновим блок корзины, то он выдаст нам информацию из кэша, а зачем пользователю чужая корзина. Для шаблонов динамических компонентов код выглядит так:?

1
2
3
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$this->setFrameMode(true);
$this->createFrame()->begin('');





А теперь, если мы хотим кэшировать компоненту, но не полностью а частично, например, хотим обновлять цены в списке элементов (bitrix:catalog.section) 
?

1
2
3
4
5
6
7
8
9
<div id="price-index">
<!--?
$frame = $this--->createFrame('price-index'.$arFields['ID'], false)->begin()    
    echo $arFields[PRICES][BASE][PRINT_VALUE_VAT];
$frame->beginStub()?>
    <span>руб.</span>          
$frame->end()
?>
</div>



, тогда при загрузке сайта пользователь увидит?

1
<span>руб.</span>  



, а после обновления асинхронным запросом увидит то, что возвращает?

1
echo $arFields[PRICES][BASE][PRINT_VALUE_VAT]; 





Если нам нужно закэшировать часть кода вне компоненты, например, в шаблоне сайта, используем такой код:?

1
2
3
4
5
6
7
\Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("user-block");
if( !$GLOBALS["USER"]->IsAuthorized() ){
    <a href="/auth/">Авторизация</a>
}else{?><br>
    <a href="/personal/">Мой профиль</a>
}<br>
\Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("user-block", "");





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

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

?

1
2
3
4
5
6
7
8
9
10
11
6. Используем кэш браузера. Подгружает статику с прошлого хита (для малой корзины)
$frame=$this->createFrame()->begin('');
$frame->setBrowserStorage(true);     
 
7. Использование анимации для баннера (плавное появление контента)
<div id="top_banner">
<!--?
$frame = $this--->createFrame('top_banner')->begin('');
 $frame->setAnimation(true);
?>    
</div>



4. Отладка
Когда вы установите для всех шаблонов компонентов настройки для композита, можно проверить страницу. Для этого откройте ее в браузере и посмотрите под не авторизованным пользователем: в подвале должен появиться баннер "Быстро с 1С Битрикс". 
Если такой баннер не появился, то смотрим файл логов, он находится в корне сайта и называется log.txt.
В нем будут указаны компоненты, для которых не настроено композитное кэширование. 

Если все-таки у вас возникнут проблемы с настройкой Композитного сайта - обращайтесь, помогу. 
Нажмите для звонка
Ваш заказ готов к оформлению
Бесплатная доставка по РоссииБесплатная доставка по России
Инструкции по установкеИнструкции по установке включены
Помощь в настройкеПомощь в настройке техники
Гарантия 3 годаДополнительная гарантия на 3 года
КешбекКешбек до 20% на бонусную карту
Возврат и обменВозврат и обмен без чека
Гарантированный подарок каждому, кто оформит заказ на сумму более 500 рублей!
+7 965 342-61-46
Консультации по решению