web-dev-qa-db-ja.com

コントローラで使用される場合、レンダー配列の#cacheプロパティはクエリからのコンテンツをキャッシュしますか?

データベースからのクエリ結果を表示するカスタムページがあります。自分でキャッシュする前に、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; 
}

動作しません:データベースクエリはすべてのページ要求で実行されます。これがこのページが管理ページであり、ユーザーを認証する必要があるためかどうかはわかりません。

2
awm

トピックが再び開いたので、私は質問に答えようとします:

コントローラで使用される場合、レンダー配列の#cacheプロパティはクエリからのコンテンツをキャッシュしますか?

はい、そうです。キャッシュキーを設定し、メタデータがページレベルまでバブルする場合、キャッシュメタデータはレンダーアレイのキャッシュに使用されます。

データベースクエリは、すべてのページ要求で実行されます。このページが管理ページであり、ユーザーを認証する必要があるためかどうかはわかりません。

ページレベルでは、これはtrueです。今のところ、管理ページはキャッシュできないと想定されています。 を参照してください。動的ページキャッシュの応答ポリシーを「deny admin route」から「deny html admin route」

コンテンツがキャッシュされ、結果を生成するクエリがすべてのページリクエストで実行されないことを期待しています。

@Berdirからのコメントとこのブログ投稿を参照して、クエリを#pre_render 折り返し電話:

https://dev.acquia.com/blog/drupal-8-performance-render-caching

3
4k4