В этом руководстве подробно рассматривается 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, каждый вариант имеет свои плюсы и минусы. Опцию включения можно выбрать в зависимости от варианта использования и требований проекта.