В этом руководстве подробно рассматривается Apache Sling Dynamic Include и объясняется, как использовать различные типы включения в AEM для динамического включения компонентов страницы в AEM.
SDI (Sling Dynamic Include) Введение
- В большинстве случаев сайты AEM содержат статические данные, которые можно кэшировать в Dispatcher, CDN или других уровнях кэширования.
- В некоторых случаях небольшие динамические данные делают всю страницу не кэшируемой в Диспетчере или других уровнях кэширования, это увеличивает общее время загрузки страницы, а также влияет на производительность издателей, поскольку каждый запрос достигает издателя для рендеринга.
- В приведенных выше случаях мы хотим кэшировать почти всю страницу в диспетчере, и выбранный компонент должен быть включен динамически.
- SDI позволяет кэшировать страницу с некоторым заполнителем (включать) для динамических данных, которые будут заменены реальным контентом при доступе к странице. Это позволяет кэшировать большую часть страниц в слоях кеширования, а динамические данные заменяются при доступе к странице.
Типы включения SDI
Включить теги помогает добавить динамические данные перед возвратом страницы клиенту. Включить типы тегов, доступные на разных уровнях между диспетчером и клиентом.

SSI (включение на стороне сервера) - процесс уровня Apache (веб-сервер) / диспетчера включает и заменяет включения реальным контентом.
ESI (Edge Site Include) - процесс уровня CDN включает и заменяет включения реальным контентом.
Javascript Include - процесс браузера включает и заменяет включения реальным контентом через вызов AJAX. Javascript Include может повлиять на время загрузки страницы, поскольку инициируется отдельный вызов Ajax для замены заполнителя реальным контентом, а также это создаст проблему с браузером, который не поддерживает JavaScript.
SSI Flow - модуль Apache и диспетчера

Это поток включения SSI через веб-сервер Apache и модуль диспетчера, процесс уровня Apache включает и заменяет реальный контент перед отправкой ответа клиенту. Пока пользователь запрашивает контент с поддержкой SDI, Dispatcher запрашивает контент с сервера AEM и кэширует ответ контента с включенным включением, при каждом запросе Apache / Dispatcher Module обрабатывает и заменяет заполнитель включения реальным контентом перед отправкой ответа на клиент. Такой же процесс выполняется для других типов включения ESI и JSI, теги включения обрабатываются и заменяются реальным контентом на разных уровнях.
Настроить SDI
В качестве первого шага установите пакет Sling Dynamic Include, его можно загрузить с https://sling.apache.org/downloads.cgi.

Установите пакет в AEM и убедитесь, что он находится в активном состоянии.

Я включил динамический компонент с именем «dynamicdata», который будет отображать текущего пользователя, вошедшего в систему.
dynamicdata.html
<h1>${currentSession.userID}</h1>
Теперь давайте включим необходимые конфигурации в Apache / Dispatcher.
В качестве первого шага загрузите модуль mod_include.so через httpd.conf или файл конфигурации, который загружает модули.
LoadModule include_module modules/mod_include.so
Настройте виртуальный хост для обработки включенных
<VirtualHost *:8080>
ServerAdmin [email protected]
DocumentRoot "C:\opt\communique\dispatcher\cache"
ServerName demo.albinsblog.com
ServerAlias cdn.albinsblog.com
RewriteEngine On
#RewriteRule ^/$ /en.html [R=301]
#RewriteRule ^/content/wknd/ca/(.*)$ /$1 [NE,L,R=301]
<Directory />
<IfModule disp_apache2.c>
SetHandler dispatcher-handler
</IfModule>
Options Indexes FollowSymLinks Includes
# Set includes to process .html files
AddOutputFilter INCLUDES .html
AddOutputFilterByType INCLUDES text/html
AllowOverride None
</Directory>
</VirtualHost>
Теперь отключите кеш для селектора «nocache» в файлах диспетчерской фермы в разделе правил кеширования.
/rules
{
/0000
{
/glob "*"
/type "allow"
}
/0001
{
/glob "/libs/cq/security/userinfo.*"
/type "deny"
}
/0004
{
/glob "*.nocache.html*"
/type "deny"
}
}
SSI Включить
Давайте теперь включим конфигурацию SDI для включения SSI, в этом сценарии Apache / Dispatcher заменяет заполнитель включения на реальный контент.

enabled – set it to true to enable SDI path – SDI configuration will be enabled only for this path resource-types – which components should be replaced with tags include-type – type of include tag (Apache SSI, ESI or Javascript) Filter selector – selector added to HTTP request for particular component and is used to get actual content.
Теперь перейдите на страницу с включенным компонентом «динамические данные» - это отобразит имя пользователя, вошедшего в систему.

Если вы видите источник страницы, динамические данные уже заменены Apache / Dispatcher перед отправкой ответа клиенту.

Давайте рассмотрим кешированный контент в Apache / Dispatcher - контент включен с включенным заполнителем и заменяется реальным контентом при каждом запросе.

JavaScript Включить
Давайте теперь включим конфигурацию SDI для Java Script include, в этом сценарии браузер заменяет заполнитель include реальным контентом посредством дополнительного вызова Ajax после начальной загрузки страницы.

Теперь перейдите на страницу с включенным компонентом «динамические данные» - это отобразит имя пользователя, вошедшего в систему.

Включение включено с помощью javascript для замены динамических данных через вызов Ajax.

Давайте рассмотрим кешированный контент в Apache / Dispatcher - контент включен с помощью javascript для замены динамических данных через вызов Ajax

ESI Включить
Давайте теперь включим конфигурацию SDI для включения ESI, в этом сценарии CDN заменяет заполнитель включения на реальный контент.
Я собираюсь включить ESI через Cloudflare - Akami поддерживает ESI, включив некоторую конфигурацию, CloudFront не поддерживает ESI по умолчанию.
Создайте воркера и назначьте ему маршрут в Cloudflare для обработки включенного ESI и замены его реальным контентом перед отправкой ответа клиенту.
esihandler


Теперь перейдите на страницу с включенным компонентом «динамические данные» - это отобразит имя пользователя, вошедшего в систему, процесс CDN, который ESI включает заполнитель, и заменит его реальным контентом.

Давайте рассмотрим кешированный контент в Apache / Dispatcher - контент включен с помощью «ESI include» для замены динамических данных CDN.

Sling Dynamic include поддерживает различные варианты включения - SSI Include, ESI Include и Java Script Include, каждый вариант имеет свои плюсы и минусы. Опцию включения можно выбрать в зависимости от варианта использования и требований проекта.