Польза
Ремкомплект Ускорителя

В модуль ускорения по гуглпейджспид завезён Ремкомплект Ускорителя — набор программных инструментов, помогающий декомпозировать страницы и оптимизировать работу сайта.

Видео по Ремкомплекту:

Ремкомплект Ускорителя
плейлист.

Основной сценарий

Основной сценарий декомпозиции какой-то из частей страницы (на примере промо-блоков статей на детальной странице товара):

Основной инструмент

Основной инструмент оптимизатора: компонент, который одновременно является и контроллером, принимающим аякс-запросы на выполнение экшенов компонентов. Прямой вызов (при размещении на странице) выполняет шаблон компонента, в котором инициализируется посадочный минимум (каркас, стили, дата-атрибуты для последующего аякс-вызова). Экшены класса компонента выполняют сбор и обработку данных, формирование ответа необходимых под конкретную задачу ресурсов (html, css, js).

Пример компонента с полным набором примеров на все основные случаи работы по ускорению, находится по пути /bitrix/modules/burlakastudio.speeder/examples.lazy/namespace/component/

На основании компонента-примера следует разворачивать свои компоненты. Как мог бы выглядеть новый компонент:

Цепочка важных узлов*

*Все узлы, описываемые ниже, присутствуют в компоненте-примере либо в закомментированном, либо в используемом виде.

Параметры

Чтобы входящие параметры (параметры компонента) пробрасывались через аякс:

Если параметры подхвачены корректно, у оболочки, которая формируется шаблоном, будет дата-атрибут data-ar-params

Ленивая или полная версия

Компонент следует разрабатывать с тем учётом, что его вызов может быть как ленивым, так и "прямым". Следует ограничиться отслеживанием только в основном шаблоне компонента. Список условий довольно обширный, например модуль ускорения отключен, либо срабатывает отключающее условие для:

В шаблон компонента передаётся параметр $arResult['FULL_LAZY_MODE'], который принимает true, если для компонент вызван в окружении, для которого активирован ленивый режим.

Дата-атрибут аякс-режима

Чтобы аякс-механизм ремкомплекта работал для конкретного компонента, в шаблоне нужно сформировать DOM-узел со специальным дата-атрибутом data-lazy-ajax.

Например:

<div data-lazy-ajax="ajaxActionPuller"></div>

Во-первых, этот дата-атрибут сканируется скриптами модуля и при появлении узла в области видимости посетителя сайта срабатывает джейэс-метод, название которого содержится в значении атрибута. Аякс-механизм обеспечивается джейэс-методом ajaxActionPuller, но в значении может содержаться любой другой метод, который будет лениво запущен при подскролле к нему пользователем.

Во-вторых, этот дата-атрибут является индикатором для пост-обработчика шаблона компонента, подсказывающим, какому узлу следует дописать другие дата-атрибуты (такие как название компонента, параметры компонента и дополнительные параметры).

inline.css для CLS и LCP

В наборе файлов шаблона может присутствовать файл inline.css. Если пост-обработчик компонента обнаруживает его, файл подключается вместе с шаблоном компонента.

Задача файла inline.css — обеспечить присутствие на странице важных для структурных элементов вёрстки шаблона компонента стилей (высота, ширина, отступы, адаптивность на разных устройствах, ...). Например, когда ячейка, ожидающая подгрузку содержимого через аякс-запрос, должна быть определённой высоты и иметь определённый отступ. Это обеспечивает хорошие показатели CLS (и косвенно — LCP, если ячейка определена механизмом проверки гугл.пейджспид таковой), но только в том случае, если на момент отрисовки каркаса стили уже определены. Для этого их публикуют непосредственно перед шаблоном.

Особенности:

Экшн компонента

Экшн, зашитый внутрь ремкомплекта и срабатывающий по-умолчанию: getFull. Соответственно, метод getFullAction — точка входа аякс-запроса на уровне класса нашего компонента. Экшн уже настроен на приём всех сигналов, в том числе и неавторизованных, принимает только post-сигналы. Также экшн снабжён пост-обработчиком, который собирает все выброшенные с нижнего уровня скрипты и стили.

Если компоненту были заявлены и переданы параметры, они попадают в объект $this автоматически и доступны по $this->arParams.

Результат работы экшена

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

Выполнение внутреннего аякс-шаблона

Объект $this компонента содержит специальный метод, позволяющий выполнить и отреднерить результат выполнение файла шаблона. Например, вызов $this->renderTemplateFile('full'); подключит файл full.php текущего шаблона компонента и вернёт html-код, сформированный во время выполнения файла. Внутри full.php может находиться любой код, включая другие компоненты. Доступны переменные $this->arParams, $this->arResult, объект шаблона, специальные переменные шаблона (типа $templateFolder) и объект компонента ($this->__component).

Пост-обработчик экшена соберёт все джейэс- и цеэсэс-подключения, вне зависимости от того, как от того, как они были сформированы — через старое ядро или через новое.

Обсуждение статьи

Написать