Прежде всего отмечу, что с версии 1С-Битрикс 16.5 данная технология получила развитие в
виде упрощенного режима настройки “Автокомпозит”. В дальнейшем в статье рассматривается именно “Автокомпозит”.
Как повлияло внедрение технологии на скорость загрузки страниц.
Пожалуй самый главный вопрос, будет ли прирост скорости столь значительным, как обещают
маркетологи?
К сожалению на этот вопрос нельзя дать точный ответ т.к. конечное ускорение зависит от многих факторов.
Наглядное представление работы технологии
*— После внедрения технологии на сайт, каждая его страница будет
записываться в кеш целиком, чтобы в дальнейшем пользователи получали страницу именно из кеша с большой
скоростью
Давайте разберем подробнее:
Сама технология подрузамевает собой разделение программистом контента сайта на динамическую и статическую части,
причем под динамическим контентом имеется ввиду уникальная информация для каждого пользователя(корзина
пользователя или личный кабинет), а например тот же каталог товаров, несмотря на частые обновления относится к
статическому контенту, т.к. он для всех пользователей одинаковый.
После внедрения технологии на сайт, каждая его страница будет записываться в кеш целиком, чтобы в дальнейшем
пользователи получали страницу именно из кеша с большой скоростью. Исключением являются динамические части
страниц, они подгружаются позже.
Что же мы получаем в реальных условиях?
Страница, полученная из композитного кеша
Как видно, html-код страницы отдается пользователю за 126мс, что быстрее в 5 раз чем без композита, что
в свою очередь повышает удобство использования сайта, снижает нагрузку на сервер, а так же повышает сайтв
позициях поисковиков. Замечательно!
Обычная загрузка страницы
Но,замечу, композит никоем образом не влияет на скорость загрузки
изображений, файлов скриптов и стилей, а так же файлов, загружаемых с других ресурсов. Это значит, что для
еще большего увеличения скорости необходима
оптимизация скорости
загрузки сайта
Инструкция по настройке автокомпозита
На данный момент в сети можно найти множество гайдов по внедрению технологии “Автокомпозит” ,
более того, на
официальном сайте битрикс имеется
курс
по внедрению технологии, поэтому я не буду расписывать последовательность
действий по настройке. Разве что считаю нужным заметить, что как во время работ программиста, так и при приеме
результата работы заказчиком
обязательно должен быть установлен стандартный режим перезаписи кеша.
Если страница
перезаписывается на каждом хите, то в ее кешировании нет никакого смысла и можно смело возвращать сайт на
доработку недобросовестному исполнителю.
Отслеживать же работу технологии, включая перезапись страниц, поможет
расширение для
Google
Chrome Bitrix Composite Notifier.
Проблемы, которые могут возникнуть у разработчика.
1. Cписок компонентов голосующих против композита, и следовательно для страниц, на которых они
распологаются, не создается композитный кеш:
- bitrix:search.page
- bitrix:sale.basket.order.ajax
- bitrix:sale.order.ajax
- bitrix:iblock.element.add.form
- bitrix:lists
- bitrix:sale.personal.subscribe
Если необходимо, что бы любавя произвольная часть страницы была отмечена как динамическая, ее можно
обернуть следующими функциями.
$dynamicArea = new \Bitrix\Main\Page\FrameStatic("id-блока");
$dynamicArea->setAnimation(true);
$dynamicArea->startDynamicArea();
$dynamicArea->finishDynamicArea();
2. Страницы с расширением *.html не записываются в кеш
На странице настроек в поле "Маска включения" добавляем "*.html".
3. Частая перезапись кеша.
Повторюсь, что прежде всего должен быть включен Стандартный режим, который позволяет стразу отслеживать
изменения
на композитных страницах. Далее необходимо сравнить файлы кеша, расположенные в дирректории
/bitrix/html_pages/#название_сайте#.
Перезаписанные страницы имеют расширение *.delete.
<microtime>. При их сравнении можно найти отличия, и исправить.
Чаще всего это уникальная информация для пользователя выводимая на странице, счетчик времени, рекламный блок,
или компоненты, добавляющие в
<head> скрипты и стили.
4. Компоненты, используемые на сайте добавляют в область <head> файлы скриптов и стилей:
В данном случае можно использовать метод Bitrix\Main\Page\AssetMode::setAssetMode. Он всё что
добавляется в
<head>из этой динамической области вырезает (методы типа CMain::SetAdditionalCSS, CMain::AddHeadScript,
CMain::ShowHeadStrings), и не включает в кеш. Сведения для <head> приходят в данных динамической
области и после выполнения ajax хита добавляются на страницу.
$dynamicArea = new \Bitrix\Main\Page\FrameStatic("workarea");
$dynamicArea->setAssetMode(AssetMode::STANDARD);
$dynamicArea->setStub("заглушка");
$dynamicArea->startDynamicArea();
$APPLICATION->includeComponent("mynamespace:mycomponent", "template", array());
$dynamicArea->finishDynamicArea();
Так же можно подключить необходимые скрипты заранее.
CJSCore::RegisterExt("session", Array(
"js" =>'/bitrix/js/main/session.js',
));
CJSCore::Init(array( 'session'));
5. Кеш перезаписывается из-за изменяемой части в шаблоне компонента.
Для обозначения динамической зоны в шаблоне компонента используйте следующий код:
Вариант без заглушки:
$frame=$this->setFrameMode(true);
$frame = $this->createFrame()->begin("");
$frame->end();
Вариант с заглушкой:
$frame=$this->setFrameMode(true);
$frame = $this->createFrame()->begin();
$frame->beginStub();
$frame->end();
Для обозначения динамического контента вне шаблонов компонента используйте класс
\Bitrix\Main\Page\Frame, и пример кода из пункта 1.