Разработка сайтов

Внедрение технологии “Композитный сайт” для samovarov-grad.ru

Прежде всего отмечу, что с версии 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.
Подписка на блог Подпишись на новые материалы от US STUDIO и вы не пропустите интересные статьи от нашей компании