Buforowanie.
Strona kreatora DXPR to renderowana tablica pola Drupala z własnymi metadanymi pamięci podręcznej oraz garścią wewnętrznych pamięci podręcznych, które moduł trzyma dla edytora i sprawdzania licencji. Ta strona wymienia, co kod buforuje, jakich tagów i kontekstów używa, co je unieważnia i co wyczyścić ręcznie po aktualizacji.
Pole kreatora
Formater pola DXPR Builder ustawia te metadane pamięci podręcznej na każdym polu kreatora:
| Metadane | Wartość | Skutek |
|---|---|---|
| Kontekst pamięci podręcznej | user.roles:authenticated |
Anonimowi i zalogowani odwiedzający dostają osobne wpisy pamięci podręcznej. |
| Tagi pamięci podręcznej | Własne tagi encji, config:dxpr_builder.settings i config:language.entity.<langcode> dla renderowanego języka |
Zapisanie encji, zapisanie ustawień modułu albo zmiana konfiguracji języka unieważnia renderowane pole. |
max-age |
0 dla każdego zalogowanego użytkownika |
Pola kreatora nigdy nie są buforowane przez Dynamic Page Cache dla zalogowanych użytkowników, ponieważ tablica renderująca niesie drupalSettings konkretnego użytkownika (e-mail, tokeny CSRF, profil). |
Dla anonimowych odwiedzających pole buforuje się normalnie, więc Internal Page Cache i Dynamic Page Cache serwują strony kreatora bez uruchamiania kodu modułu. Zapisanie w kreatorze zapisuje encję, więc Drupal unieważnia tagi pamięci podręcznej encji jak przy każdym innym zapisie.
Gdy edytor jest włączony na polu, moduł dodaje ponownie
config:dxpr_builder.settings. Przy Asset source ustawionym na
Cloud i nieskonfigurowanym kluczu produktu ustawia też max-age na
0, aby komunikat o kluczu produktu pokazywał się na każdej stronie.
Własne formularze administracyjne modułu unieważniają
config:dxpr_builder.settings wprost: General Settings, AI,
formularz profilu użytkownika oraz formularze szablonów stron i użytkownika.
Widoki i bloki wewnątrz strony
Bloki i widoki przechowywane są w zapisanym HTML jako puste symbole
zastępcze az-cms-element. Gdy pole się renderuje, moduł wczytuje każdy
blok albo widok, renderuje go podstawowym rendererem i wstawia wynik
do znaczników pola. Biblioteki widoku i jego drupalSettings są kopiowane
na pole; jego metadane pamięci podręcznej przepływają przez renderer jak
przy każdej tablicy renderującej budowanej podczas renderowania strony.
Konsekwencją jest to, że wiersze widoku pozostają w zbuforowanym polu, dopóki jeden z tagów pamięci podręcznej widoku nie zostanie unieważniony. Widok z buforowaniem czasowym trzyma stare wiersze przez cały swój czas życia. Jeśli odwiedzający widzą nieświeże wiersze:
- Otwórz widok, rozwiń Advanced i ustaw Caching na Tag based. None zatrzymuje Dynamic Page Cache, ale Internal Page Cache nadal trzyma całe strony dla anonimowych odwiedzających.
- Zapisz widok. Zapisanie dowolnego widoku unieważnia też
config:view_list, co czyści listy widoków modułu dla edytora. - Wyczyść wszystkie pamięci podręczne.
W edytorze blok albo widok dodany lub zmieniony pobierany jest przez
/dxpr_builder/ajax. Moduł nie buforuje tej odpowiedzi.
Wewnętrzne pamięci podręczne
Wszystkie wpisy znajdują się w domyślnym koszyku pamięci podręcznej (cache.default).
Zbuforowane wybieraki elementów noszą tag dxpr_builder:cms_elements
oraz tagi list typów encji, które wymieniają, więc czyszczą się same, gdy te
encje się zmieniają.
| ID pamięci podręcznej | Treść | Czyści |
|---|---|---|
dxpr_builder:cms_elements_blocks, dxpr_builder:cms_block_categories |
Lista bloków i kategorie bloków dla wybieraka elementów | Zapisanie albo usunięcie bloku treści lub formularza webform (tagi list block_content_list, webform), usunięcie wpisów przy odinstalowaniu dowolnego modułu, drush cr |
dxpr_builder:cms_disallowed_elements:<uid>:<roles hash> |
Bloki, których bieżący użytkownik nie może używać | Te same tagi oraz config:user.role.<role> dla każdej roli użytkownika |
dxpr_builder:cms_elements_views, dxpr_builder:cms_view_elements_settings, dxpr_builder:cms_views_tags |
Wyświetlenia widoków, ich ustawienia i identyfikatory dla edytora | Zapisanie, dodanie albo usunięcie dowolnego widoku (config:view_list), drush cr |
dxpr_builder:button_styles |
Style przycisków dla elementu Button | Tag dxpr_builder:cms_elements, drush cr |
dxpr_builder_license_info |
Wynik wywołania statusu licencji | Wygasa po 24 godzinach, gdy autoryzowano, 30 minutach w przeciwnym razie (LICENSE_CHECK_INTERVAL, LICENSE_NOT_AUTHORIZED_INTERVAL); unieważniane po wysłaniu przez witrynę zmiany użytkownika do serwera licencji |
dxpr_builder_license_users |
Lista redaktorów z serwera licencji | Wygasa po 24 godzinach; unieważniane po wysłaniu przez witrynę zmiany użytkownika do serwera licencji |
dxpr_builder_blacklisted |
Wynik listy zablokowanych domen | Wygasa po godzinie albo po minucie, gdy domena jest zablokowana |
dxpr_builder:jwt_decoded:<sha256 of the key> |
Zdekodowany klucz produktu, jeden wpis na klucz | Tag config:dxpr_builder.settings |
Klasy narzędziowe motywu (dxpr_builder_classes w pliku .info.yml
motywu) pochodzą z buforowanych informacji o motywie Drupala, więc zmiana
wymaga drush cr, zanim edytor ją zobaczy. Pliki zestawów ikon
(*.dxpr_icon_sets.yml) odczytywane są przy każdym wczytaniu strony
edytora, ale nazwana przez nie biblioteka wymaga drush cr jak każda
nowa biblioteka.
Pliki i agregacja
Sześć skryptów edytora jest zewnętrznych (Cloud) albo zadeklarowanych z
preprocess: FALSE, więc agregacja ich nigdy nie dotyka. Agregacja
dotyczy bibliotek pomocniczych edytora, takich jak
dxpr_builder/editor.core z Sortable, oraz plików dla odwiedzających
(dxpr_builder/core, dxpr_builder/editor.frontend, biblioteki
elements.* i bootstrap_5). Dwa objawy wracają do pamięci podręcznej
agregacji:
- Edytor psuje się po aktualizacji albo zgłasza
Sortable is not definedtylko przy włączonej agregacji. Postępuj zgodnie z Edytor się nie pojawia. - Odwiedzający nie widzą stylów ani ikon po aktualizacji albo zmianie ustawień. Postępuj zgodnie z Odwiedzający widzą coś innego.
Co wyczyścić po aktualizacji
-
Uruchom aktualizacje bazy danych, potem wyczyść pamięci podręczne:
drush updb -y drush crdrush crprzebudowuje definicje bibliotek kreatora, które podążają za wersją modułu i źródłem plików, zagregowane pliki oraz wewnętrzne pamięci podręczne powyżej. -
Otwórz jedną stronę kreatora jako redaktor i zapisz ją. Zapisuje to stronę znacznikami bieżącego wydania i unieważnia jej tagi encji.
-
Za Varnishem albo CDN wyczyść strony kreatora albo poczekaj na upłynięcie maksymalnego wieku; moduł nie wysyła żądań czyszczenia.
Jeśli strona nadal pokazuje odwiedzającym starą treść, zobacz Problemy po aktualizacji.
Co dalej?
- Wydajność: co pobiera każda strona odwiedzającego i redaktora.
- Architektura: kod, który renderuje, zapisuje i buforuje pole kreatora.
- Odwiedzający widzą coś innego: objawy związane z pamięcią podręczną i ich naprawy.