Caching.
Eine DXPR Builder-Seite ist ein Drupal-Feld-Render-Array mit eigenen Cache-Metadaten, plus einer Handvoll interner Caches, die das Modul für den Editor und die Lizenzprüfung hält. Diese Seite listet, was der Code cacht, welche Tags und Kontexte er nutzt, was sie invalidiert und was Sie nach einem Update von Hand leeren.
Das Builder-Feld
Der DXPR Builder-Feldformatter setzt diese Cache-Metadaten auf jedes Builder-Feld:
| Metadaten | Wert | Wirkung |
|---|---|---|
| Cache-Kontext | user.roles:authenticated |
Anonyme und authentifizierte Besucher erhalten getrennte Cache-Einträge. |
| Cache-Tags | Die eigenen Tags der Entität, config:dxpr_builder.settings und config:language.entity.<langcode> für die gerenderte Sprache |
Das Speichern der Entität, das Speichern der Moduleinstellungen oder das Ändern der Sprachkonfiguration invalidiert das gerenderte Feld. |
max-age |
0 für alle authentifizierten Besucher |
Builder-Felder werden für eingeloggte Besucher nie im Dynamic Page Cache gecacht, weil das Render-Array benutzerspezifische drupalSettings trägt (E-Mail, CSRF-Tokens, Profil). |
Für anonyme Besucher wird das Feld normal gecacht, sodass Internal Page Cache und Dynamic Page Cache Builder-Seiten ausliefern, ohne den Modulcode laufen zu lassen. Das Speichern im Builder speichert die Entität, sodass Drupal die Cache-Tags der Entität invalidiert wie bei jedem anderen Speichern.
Wenn der Editor auf dem Feld aktiviert ist, fügt das Modul
config:dxpr_builder.settings erneut hinzu. Mit Asset source auf
Cloud und ohne konfigurierten Produktschlüssel setzt es max-age außerdem auf
0, sodass die Produktschlüsselmeldung auf jeder Seite erscheint.
Die eigenen Adminformulare des Moduls invalidieren config:dxpr_builder.settings
explizit: General Settings, AI, das Benutzerprofilformular und
die Seiten- und Benutzervorlagenformulare.
Ansichten und Blöcke auf einer Seite
Blöcke und Ansichten liegen im gespeicherten HTML als leere
az-cms-element-Platzhalter. Wenn das Feld rendert, lädt das Modul
jeden Block oder jede Ansicht, rendert sie mit dem Core-Renderer und
fügt die Ausgabe in das Feldmarkup ein. Die Libraries der Ansicht und ihre drupalSettings werden
aufs Feld kopiert; ihre Cache-Metadaten blubbern durch den Renderer wie
bei jedem Render-Array während eines Seitenrenderns.
Die Folge ist, dass die Zeilen einer Ansicht im gecachten Feld bleiben, bis eines der Cache-Tags der Ansicht invalidiert wird. Eine Ansicht mit zeitbasiertem Caching behält alte Zeilen ihre ganze Lebensdauer. Wenn Besucher veraltete Zeilen sehen:
- Öffnen Sie die Ansicht, klappen Sie Advanced auf und setzen Sie Caching auf Tag based. None stoppt den Dynamic Page Cache, aber der Internal Page Cache behält weiter ganze Seiten für anonyme Besucher.
- Speichern Sie die Ansicht. Das Speichern einer Ansicht invalidiert außerdem
config:view_list, was die Ansichtslisten des Moduls für den Editor leert. - Leeren Sie alle Caches.
Im Editor wird ein hinzugefügter oder geänderter Block bzw. eine Ansicht über
/dxpr_builder/ajax geholt. Das Modul cacht diese Antwort nicht.
Interne Caches
Alle Einträge liegen im Standard-Cache-Bin (cache.default). Die
Element-Picker-Caches tragen das Tag dxpr_builder:cms_elements
plus die Listen-Cache-Tags der Entitätstypen, die sie listen, sodass sie
sich selbst leeren, wenn sich diese Entitäten ändern.
| Cache-ID | Inhalt | Geleert durch |
|---|---|---|
dxpr_builder:cms_elements_blocks, dxpr_builder:cms_block_categories |
Blockliste und Blockkategorien für den Element-Picker | Speichern oder Löschen eines Inhaltsblocks oder eines Webformulars (block_content_list, Webformular-Listen-Tags), Löschen der Einträge bei Deinstallation eines Moduls, drush cr |
dxpr_builder:cms_disallowed_elements:<uid>:<roles hash> |
Blöcke, die dem aktuellen Konto nicht zur Verfügung stehen | Dieselben Tags plus config:user.role.<role> für jede Rolle des Kontos |
dxpr_builder:cms_elements_views, dxpr_builder:cms_view_elements_settings, dxpr_builder:cms_views_tags |
Ansichtanzeigen, deren Einstellungen und Kennungen für den Editor | Speichern, Hinzufügen oder Löschen einer Ansicht (config:view_list), drush cr |
dxpr_builder:button_styles |
Button-Stile für das Button-Element | Tag dxpr_builder:cms_elements, drush cr |
dxpr_builder_license_info |
Ergebnis des Lizenzstatus-Abrufs | Läuft nach 24 Stunden ab, wenn autorisiert, sonst nach 30 Minuten (LICENSE_CHECK_INTERVAL, LICENSE_NOT_AUTHORIZED_INTERVAL); invalidiert, nachdem die Website eine Benutzeränderung an den Lizenzserver sendet |
dxpr_builder_license_users |
Redaktionsliste vom Lizenzserver | Läuft nach 24 Stunden ab; invalidiert, nachdem die Website eine Benutzeränderung an den Lizenzserver sendet |
dxpr_builder_blacklisted |
Domain-Blocklist-Ergebnis | Läuft nach einer Stunde ab, oder nach einer Minute, solange die Domain blockiert ist |
dxpr_builder:jwt_decoded:<sha256 of the key> |
Dekodierter Produktschlüssel, ein Eintrag pro Schlüssel | Tag config:dxpr_builder.settings |
Theme-Utility-Klassen (dxpr_builder_classes in einem Theme-
.info.yml) kommen aus Drupals gecachten Theme-Informationen, sodass eine
Änderung drush cr braucht, bevor der Editor sie sieht. Icon-Set-Dateien
(*.dxpr_icon_sets.yml) werden bei jedem Editor-Seitenaufruf gelesen, aber eine
Library, die sie nennen, braucht drush cr wie jede neue Library.
Assets und Aggregierung
Die sechs Editor-Skripte sind entweder extern (Cloud) oder mit
preprocess: FALSE deklariert, sodass die Aggregierung sie nie anfasst. Die Aggregierung
gilt für die Hilfs-Libraries des Editors, etwa
dxpr_builder/editor.core mit Sortable, und für die Besucherdateien
(dxpr_builder/core, dxpr_builder/editor.frontend, die
elements.*-Libraries und bootstrap_5). Zwei Symptome gehen auf den
Aggregierungs-Cache zurück:
- Der Editor bricht nach einem Update, oder meldet
Sortable is not definednur bei eingeschalteter Aggregierung. Folgen Sie Der Editor erscheint nicht. - Besucher sehen nach einem Update oder einer Einstellungsänderung kein Styling oder keine Icons. Folgen Sie Besucher sehen etwas anderes.
Was nach einem Update zu leeren ist
-
Führen Sie die Datenbank-Updates aus und leeren Sie dann die Caches:
drush updb -y drush crdrush crbaut die Library-Definitionen des Builders neu, die der Modulversion und der Assetquelle folgen, die aggregierten Assetdateien und die internen Caches oben. -
Öffnen Sie als Mitglied der Redaktion eine Builder-Seite und speichern Sie sie. Das schreibt die Seite mit dem Markup der aktuellen Version und invalidiert ihre Entitäts-Tags.
-
Purgen Sie hinter Varnish oder einem CDN die Builder-Seiten oder warten Sie, bis das Höchstalter abläuft; das Modul sendet keine Purge-Anfragen.
Wenn eine Seite Besuchern weiter alte Inhalte zeigt, siehe Probleme nach dem Aktualisieren.
Wie geht es weiter?
- Performance, was jede Besucher- und Redaktionsseite lädt.
- Architektur für den Code, der ein Builder-Feld rendert, speichert und cacht.
- Besucher sehen etwas anderes für die cachebezogenen Symptome und ihre Lösungen.