データベースからのクエリ結果を表示するカスタムページがあります。自分でキャッシュする前に、Drupal 8レンダーアレイが認証済みユーザーのキャッシュをサポートしているかどうかを確認しています。私のユースケースは、ノードエンティティのルートとコントローラーです。ユーザーテーブルのエントリのリストを表示するnode/id/somethingに移動します。これをコントローラーにキャッシュしたいと思います。
次のコードを使用しています。
public function displayContent(NodeInterface $node) {
// query the DB to generate content.
$content['#markup'] = $result_of_db_query;
$content['#cache'] = [
'keys' => ['entity_view', 'node', $node->id()],
'tags' => ['node:' . $node->id()],
'max-age' => Cache::PERMANENT,
];
return $content;
}
動作しません:データベースクエリはすべてのページ要求で実行されます。これがこのページが管理ページであり、ユーザーを認証する必要があるためかどうかはわかりません。
トピックが再び開いたので、私は質問に答えようとします:
コントローラで使用される場合、レンダー配列の#cacheプロパティはクエリからのコンテンツをキャッシュしますか?
はい、そうです。キャッシュキーを設定し、メタデータがページレベルまでバブルする場合、キャッシュメタデータはレンダーアレイのキャッシュに使用されます。
データベースクエリは、すべてのページ要求で実行されます。このページが管理ページであり、ユーザーを認証する必要があるためかどうかはわかりません。
ページレベルでは、これはtrueです。今のところ、管理ページはキャッシュできないと想定されています。 を参照してください。動的ページキャッシュの応答ポリシーを「deny admin route」から「deny html admin route」
コンテンツがキャッシュされ、結果を生成するクエリがすべてのページリクエストで実行されないことを期待しています。
@Berdirからのコメントとこのブログ投稿を参照して、クエリを#pre_render
折り返し電話:
https://dev.acquia.com/blog/drupal-8-performance-render-caching