Кешування.
Сторінка 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 копіюються
на поле; його метадані кешу спливають через рендер, як і
для будь-якого рендер-масива, побудованого під час рендеру сторінки.
Наслідок у тому, що рядки подання лишаються всередині кешованого поля, доки один із тегів кешу подання не буде інвалідовано. Подання з кешуванням за часом тримає старі рядки весь свій час життя. Якщо відвідувачі бачать застарілі рядки:
- Відкрийте подання, розгорніть Advanced і встановіть Caching у Tag based. None зупиняє Dynamic Page Cache, але Internal Page Cache досі тримає цілі сторінки для анонімних відвідувачів.
- Збережіть подання. Збереження будь-якого подання також інвалідує
config:view_list, що очищує списки подань модуля для редактора. - Очистьте всі кеші.
У редакторі блок або подання, яке ви додаєте або змінюєте, отримується через
/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лише з увімкненою агрегацією. Дотримуйтеся сторінки Редактор не з’являється. - Відвідувачі не бачать стилізації або піктограм після оновлення або зміни налаштувань. Дотримуйтеся сторінки Відвідувачі бачать інше.
Що очистити після оновлення
-
Запустіть оновлення бази даних, потім очистьте кеші:
drush updb -y drush crdrush crперебудовує визначення бібліотек конструктора, які слідують за версією модуля та джерелом ресурсів, агреговані файли ресурсів і внутрішні кеші вище. -
Відкрийте одну сторінку конструктора як редактор і збережіть її. Це пише сторінку з розміткою поточного релізу й інвалідує її теги сутності.
-
За Varnish або CDN очистьте сторінки конструктора або зачекайте, доки мине максимальний вік; модуль не надсилає запитів очищення.
Якщо сторінка досі показує старий вміст відвідувачам, див. Проблеми після оновлення.
Що далі?
- Продуктивність для того, що завантажує кожна сторінка відвідувачів і редакторів.
- Архітектура для коду, який рендерить, зберігає та кешує поле конструктора.
- Відвідувачі бачать інше для симптомів, пов’язаних із кешем, та їхніх виправлень.