Caching.
Een DXPR Builder-pagina is een Drupal-veldrender array met eigen cachemetadata, plus een handvol interne caches die de module bijhoudt voor de editor en de licentiecontrole. Deze pagina somt op wat de code cacht, welke tags en contexten die gebruikt, wat ze invalideert en wat je na een update met de hand wist.
Het builderveld
De DXPR Builder-veldformatter zet deze cachemetadata op elk builderveld:
| Metadata | Waarde | Effect |
|---|---|---|
| Cachecontext | user.roles:authenticated |
Anonieme en ingelogde bezoekers krijgen aparte cachevermeldingen. |
| Cachetags | De eigen tags van de entiteit, config:dxpr_builder.settings, en config:language.entity.<langcode> voor de gerenderde taal |
Het opslaan van de entiteit, het opslaan van de module-instellingen of het wijzigen van de taalconfiguratie invalideert het gerenderde veld. |
max-age |
0 voor elke ingelogde gebruiker |
Buildervelden worden nooit gecachet door Dynamic Page Cache voor ingelogde gebruikers, omdat de render array gebruikersspecifieke drupalSettings draagt (e-mail, CSRF-tokens, profiel). |
Voor anonieme bezoekers wordt het veld normaal gecachet, dus Internal Page Cache en Dynamic Page Cache serveren builderpagina's zonder de modulecode te draaien. Opslaan in de builder slaat de entiteit op, dus Drupal invalideert de cachetags van de entiteit zoals bij elke andere opslagactie.
Wanneer de editor op het veld is ingeschakeld, voegt de module
config:dxpr_builder.settings opnieuw toe. Met Asset source op
Cloud en zonder geconfigureerde productsleutel zet hij max-age ook op
0, zodat de melding over de productsleutel op elke pagina verschijnt.
De eigen adminformulieren van de module invalideren config:dxpr_builder.settings
expliciet: General Settings, AI, het gebruikersprofielformulier en
de formulieren voor pagina- en gebruikerssjablonen.
Views en blokken in een pagina
Blokken en views worden in de opgeslagen HTML bewaard als lege
az-cms-element-placeholders. Wanneer het veld rendert, laadt de module
elk blok of elke view, rendert die met de corerenderer en voegt de output in de
veldmarkup in. De libraries van de view en drupalSettings worden naar het veld
gekopieerd; zijn cachemetadata borrelt via de renderer door zoals bij elke render array
die tijdens een paginarender wordt gebouwd.
Het gevolg is dat de rijen van een view in het gecachete veld blijven totdat een van de cachetags van de view wordt geïnvalideerd. Een view met tijdgebaseerde caching behoudt oude rijen gedurende zijn hele levensduur. Als bezoekers verouderde rijen zien:
- Open de view, vouw Advanced uit, en zet Caching op Tag based. None stopt Dynamic Page Cache, maar Internal Page Cache bewaart nog steeds hele pagina's voor anonieme bezoekers.
- Sla de view op. Het opslaan van een view invalideert ook
config:view_list, wat de lijsten met views van de module voor de editor wist. - Wis alle caches.
In de editor wordt een blok of view die je toevoegt of wijzigt via
/dxpr_builder/ajax opgehaald. De module cacht dat antwoord niet.
Interne caches
Alle vermeldingen staan in de standaardcachebin (cache.default). De
caches van de elementkiezer dragen de tag dxpr_builder:cms_elements
plus de lijstcachetags van de entiteittypen die ze tonen, dus ze
wissen zichzelf wanneer die entiteiten wijzigen.
| Cache-ID | Inhoud | Gewist door |
|---|---|---|
dxpr_builder:cms_elements_blocks, dxpr_builder:cms_block_categories |
Blokkenlijst en blokcategorieën voor de elementkiezer | Het opslaan of verwijderen van een inhoudsblok of een webformulier (block_content_list, webform-lijsttags), het verwijderen van de vermeldingen wanneer een module wordt gedeïnstalleerd, drush cr |
dxpr_builder:cms_disallowed_elements:<uid>:<roles hash> |
Blokken die de huidige gebruiker niet mag gebruiken | Dezelfde tags plus config:user.role.<role> voor elk van de rollen van de gebruiker |
dxpr_builder:cms_elements_views, dxpr_builder:cms_view_elements_settings, dxpr_builder:cms_views_tags |
View-displays, hun instellingen en identifiers voor de editor | Het opslaan, toevoegen of verwijderen van een view (config:view_list), drush cr |
dxpr_builder:button_styles |
Knopstijlen voor het Knop-element | Tag dxpr_builder:cms_elements, drush cr |
dxpr_builder_license_info |
Resultaat van de licentiestatusaanroep | Verloopt na 24 uur wanneer geautoriseerd, anders 30 minuten (LICENSE_CHECK_INTERVAL, LICENSE_NOT_AUTHORIZED_INTERVAL); geïnvalideerd nadat de site een gebruikerswijziging naar de licentieserver stuurt |
dxpr_builder_license_users |
Redacteurslijst van de licentieserver | Verloopt na 24 uur; geïnvalideerd nadat de site een gebruikerswijziging naar de licentieserver stuurt |
dxpr_builder_blacklisted |
Resultaat van de domeinblokkeerlijst | Verloopt na een uur, of na een minuut zolang het domein is geblokkeerd |
dxpr_builder:jwt_decoded:<sha256 of the key> |
Gedecodeerde productsleutel, één vermelding per key | Tag config:dxpr_builder.settings |
Thema-utilityklassen (dxpr_builder_classes in een .info.yml van een
thema) komen uit de gecachete themainformatie van Drupal, dus een
wijziging heeft drush cr nodig voordat de editor hem ziet. Pictogrammensetbestanden
(*.dxpr_icon_sets.yml) worden bij elke editorpaginalading gelezen, maar een
library die ze noemen heeft drush cr nodig zoals elke nieuwe library.
Assets en aggregatie
De zes editorscripts zijn extern (Cloud) of gedeclareerd met
preprocess: FALSE, dus aggregatie raakt ze nooit. Aggregatie
geldt wel voor de helperlibraries van de editor, zoals
dxpr_builder/editor.core met Sortableen voor de bestanden voor bezoekers
(dxpr_builder/core, dxpr_builder/editor.frontend, de
elements.*-libraries en bootstrap_5). Twee symptomen zijn terug te
voeren op de aggregatiecache:
- De editor breekt na een update, of meldt
Sortable is not definedalleen met aggregatie aan. Volg De editor verschijnt niet. - Bezoekers zien geen styling of pictogrammen na een update of een instellingswijziging. Volg Bezoekers zien iets anders.
Wat na een update wissen
-
Draai de database-updates en wis daarna de caches:
drush updb -y drush crdrush crherbouwt de librarydefinities van de builder, die de moduleversie en de assetbron volgen, de geaggregeerde assetbestanden en de interne caches hierboven. -
Open één builderpagina als redacteur en sla die op. Dit schrijft de pagina met de markup van de huidige release en invalideert zijn entiteitstags.
-
Purge achter Varnish of een CDN de builderpagina's of wacht tot de maximale leeftijd voorbij is; de module stuurt geen purgeverzoeken.
Als een pagina voor bezoekers nog steeds oude inhoud toont, zie Problemen na het updaten.
Wat nu?
- Performance voor wat elke bezoekers- en redacteurspagina downloadt.
- Architectuur voor de code die een builderveld rendert, opslaat en cacht.
- Bezoekers zien iets anders voor de cachegerelateerde symptomen en hun oplossingen.