キャッシュ.
DXPR Builderページは独自のキャッシュメタデータを持つDrupalフィールドレンダー配列で、エディターとライセンス確認用にモジュールが保持するいくつかの内部キャッシュが加わります。このページではコードがキャッシュする内容、使用するタグとコンテキスト、無効化するもの、更新後に手動でクリアするものを列挙します。
Builderフィールド
フィールドフォーマッターDXPR BuilderはすべてのBuilderフィールドにこのキャッシュメタデータを設定します。
| メタデータ | 値 | 効果 |
|---|---|---|
| キャッシュコンテキスト | user.roles:authenticated |
匿名訪問者と認証済み訪問者は別々のキャッシュエントリーを取得します。 |
| キャッシュタグ | エンティティ独自のタグ、config:dxpr_builder.settings、config:language.entity.<langcode>(レンダー言語用) |
エンティティの保存、モジュール設定の保存、言語設定の変更でレンダー済みフィールドが無効化されます。 |
max-age |
0は認証済み利用者の場合 |
ログイン利用者向けにBuilderフィールドがDynamic Page Cacheでキャッシュされることはありません。レンダー配列が利用者固有のdrupalSettings(メール、CSRFトークン、プロフィール)を運ぶからです。 |
匿名訪問者向けにフィールドは通常通りキャッシュされるため、Internal Page CacheとDynamic Page Cacheはモジュールコードを実行せずにBuilderページを提供します。Builderでの保存はエンティティを保存するため、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 |
ドメインブロックリストの結果 | 1時間後に期限切れ、ドメインのブロック中は1分 |
dxpr_builder:jwt_decoded:<sha256 of the key> |
デコード済みプロダクトキー、キーごとに1エントリー | タグconfig:dxpr_builder.settings |
テーマユーティリティークラス(テーマ.info.yml内のdxpr_builder_classes)はDrupalのキャッシュ済みテーマ情報から来るため、変更はエディターが確認する前にdrush crが必要です。アイコンセットファイル(*.dxpr_icon_sets.yml)はエディターの各ページ読み込みで読まれますが、指定するライブラリーは他の新規ライブラリー同様drush crが必要です。
アセットと集約
6つのエディタースクリプトは外部(Cloud)かpreprocess: FALSE宣言のため、集約は触れません。集約はエディターのヘルパーライブラリー(Sortable付きdxpr_builder/editor.coreなど)や訪問者向けファイル(dxpr_builder/core、dxpr_builder/editor.frontend、elements.*ライブラリー、bootstrap_5)に適用されます。2つの症状は集約キャッシュに遡ります。
- 更新後にエディターが壊れるか、集約オン時のみ
Sortable is not definedを報告します。エディターが表示されないの手順に従います。 - 更新や設定変更後に訪問者にスタイルやアイコンが見えません。訪問者の見え方が異なるの手順に従います。
更新後にクリアする内容
-
データベース更新を実行し、キャッシュをクリアします。
drush updb -y drush crdrush crはBuilderのライブラリー定義(モジュールバージョンとアセットソースに従う)、集約済みアセットファイル、上記の内部キャッシュを再構築します。 -
編集者として1つのBuilderページを開いて保存します。現在のリリースのマークアップでページが書き込まれ、エンティティタグが無効化されます。
-
VarnishやCDNの背後では、Builderページをパージするか最大年齢の経過を待ちます。モジュールはパージリクエストを送信しません。
訪問者にまだ古いコンテンツが見える場合、更新後の問題を参照。
次のステップ
- パフォーマンス:訪問者・編集者の各ページのダウンロード内容に。
- アーキテクチャー:Builderフィールドをレンダー・保存・キャッシュするコードに。
- 訪問者の見え方が異なる:キャッシュ関連の症状と修正に。