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

использованная литература