Кешування.

Вивчення DXPR BuilderКерування сайтомЗапуск у продакшні

Сторінка DXPR Builder це рендер-масив поля Drupal із власними метаданими кешу, плюс жменька внутрішніх кешів, які модуль тримає для редактора та перевірки ліцензії. Ця сторінка перелічує те, що кешує код, які теги та контексти він використовує, що їх інвалідує, і що очистити вручну після оновлення.

Поле конструктора

Форматувальник поля DXPR Builder встановлює ці метадані кешу на кожному полі конструктора:

Метадані Значення Ефект
Контекст кешу user.roles:authenticated Анонімні та автентифіковані відвідувачі отримують окремі записи кешу.
Теги кешу Власні теги сутності, config:dxpr_builder.settings і config:language.entity.<langcode> для рендереної мови Збереження сутності, збереження налаштувань модуля або зміна конфігурації мови інвалідує рендерене поле.
max-age 0 для будь-якого автентифікованого користувача Поля конструктора ніколи не кешуються Dynamic Page Cache для залогінених користувачів, бо рендер-масив несе специфічні для користувача drupalSettings (електронна пошта, CSRF-токени, профіль).

Для анонімних відвідувачів поле кешується звичайно, тож Internal Page Cache і Dynamic Page Cache подають сторінки конструктора без запуску коду модуля. Збереження в конструкторі зберігає сутність, тож Drupal інвалідує теги кешу сутності, як і за будь-якого іншого збереження.

Коли редактор увімкнено на полі, модуль знову додає config:dxpr_builder.settings. З Asset source, установленим у Cloud, і без налаштованого ключа продукту, він також встановлює max-age у 0, щоб повідомлення ключа продукту показувалося на кожній сторінці.

Власні форми адміністрування модуля явно інвалідують config:dxpr_builder.settings: General Settings, AI, форма профілю користувача та форми шаблонів сторінок і користувачів.

Подання та блоки всередині сторінки

Блоки та подання зберігаються у збереженому HTML як порожні заповнювачі az-cms-element. Коли поле рендериться, модуль завантажує кожен блок або подання, рендерить його ядерним рендером і вставляє вивід у розмітку поля. Бібліотеки подання та drupalSettings копіюються на поле; його метадані кешу спливають через рендер, як і для будь-якого рендер-масива, побудованого під час рендеру сторінки.

Наслідок у тому, що рядки подання лишаються всередині кешованого поля, доки один із тегів кешу подання не буде інвалідовано. Подання з кешуванням за часом тримає старі рядки весь свій час життя. Якщо відвідувачі бачать застарілі рядки:

  1. Відкрийте подання, розгорніть Advanced і встановіть Caching у Tag based. None зупиняє Dynamic Page Cache, але Internal Page Cache досі тримає цілі сторінки для анонімних відвідувачів.
  2. Збережіть подання. Збереження будь-якого подання також інвалідує config:view_list, що очищує списки подань модуля для редактора.
  3. Очистьте всі кеші.

У редакторі блок або подання, яке ви додаєте або змінюєте, отримується через /dxpr_builder/ajax. Модуль не кешує цю відповідь.

Внутрішні кеші

Усі записи живуть у типовому біні кешу (cache.default). Кеші вибору елементів несуть тег dxpr_builder:cms_elements плюс теги кешу списків типів сутностей, які вони перелічують, тож вони очищуються самі, коли ці сутності змінюються.

ID кешу Вміст Очищується
dxpr_builder:cms_elements_blocks, dxpr_builder:cms_block_categories Список блоків і категорії блоків для вибору елементів Збереження або видалення блока вмісту або вебформи (block_content_list, теги списків вебформ), видалення записів, коли будь-який модуль деінстальовано, drush cr
dxpr_builder:cms_disallowed_elements:<uid>:<roles hash> Блоки, які поточний користувач не може використовувати Ті самі теги плюс config:user.role.<role> для кожної з ролей користувача
dxpr_builder:cms_elements_views, dxpr_builder:cms_view_elements_settings, dxpr_builder:cms_views_tags Покази подань, їхні налаштування та ідентифікатори для редактора Збереження, додавання або видалення будь-якого подання (config:view_list), drush cr
dxpr_builder:button_styles Стилі кнопок для елемента Button Тег dxpr_builder:cms_elements, drush cr
dxpr_builder_license_info Результат виклику статусу ліцензії Закінчується через 24 години, коли авторизовано, 30 хвилин інакше (LICENSE_CHECK_INTERVAL, LICENSE_NOT_AUTHORIZED_INTERVAL); інвалідується після того, як сайт надсилає зміну користувача на сервер ліцензій
dxpr_builder_license_users Список редакторів із сервера ліцензій Закінчується через 24 години; інвалідується після того, як сайт надсилає зміну користувача на сервер ліцензій
dxpr_builder_blacklisted Результат списку блокування доменів Закінчується через годину або хвилину, поки домен заблоковано
dxpr_builder:jwt_decoded:<sha256 of the key> Декодований ключ продукту, один запис на ключ Тег config:dxpr_builder.settings

Службові класи теми (dxpr_builder_classes у .info.yml теми) походять із кешованої інформації теми Drupal, тож зміна потребує drush cr, перш ніж редактор її побачить. Файли наборів піктограм (*.dxpr_icon_sets.yml) читаються під час кожного завантаження сторінки редактора, але бібліотека, яку вони називають, потребує drush cr, як і будь-яка нова бібліотека.

Ресурси та агрегація

Шість скриптів редактора або зовнішні (Cloud), або заявлені з preprocess: FALSE, тож агрегація їх ніколи не чіпає. Агрегація застосовується до допоміжних бібліотек редактора, як-от dxpr_builder/editor.core з Sortable, і до файлів для відвідувачів (dxpr_builder/core, dxpr_builder/editor.frontend, бібліотеки elements.* і bootstrap_5). Два симптоми ведуть назад до кешу агрегації:

  • Редактор ламається після оновлення або повідомляє Sortable is not defined лише з увімкненою агрегацією. Дотримуйтеся сторінки Редактор не з’являється.
  • Відвідувачі не бачать стилізації або піктограм після оновлення або зміни налаштувань. Дотримуйтеся сторінки Відвідувачі бачать інше.

Що очистити після оновлення

  1. Запустіть оновлення бази даних, потім очистьте кеші:

    drush updb -y
    drush cr
    

    drush cr перебудовує визначення бібліотек конструктора, які слідують за версією модуля та джерелом ресурсів, агреговані файли ресурсів і внутрішні кеші вище.

  2. Відкрийте одну сторінку конструктора як редактор і збережіть її. Це пише сторінку з розміткою поточного релізу й інвалідує її теги сутності.

  3. За Varnish або CDN очистьте сторінки конструктора або зачекайте, доки мине максимальний вік; модуль не надсилає запитів очищення.

Якщо сторінка досі показує старий вміст відвідувачам, див. Проблеми після оновлення.

Що далі?