まず、私はデューデリジェンスを確保し、以前に出てきた質問を重複させないようにしています。stackexchangeやその他のさまざまな場所で、ビューのキャッシュや、さまざまなタイプのビューキャッシュの詳細(例:hereとhere)について説明している投稿が数多くあります。ただし、ビューキャッシュのさまざまなレイヤー間の関係と、それらがケース固有のキャッシュの決定にどのように影響するかを十分に説明している詳細はまだわかりません。簡単にするために、私はこの質問の範囲を、コントリビュートスペースで提供される他のレイヤーとは関係なく、すぐに使える7.x-3.xのキャッシュオプションに焦点を合わせています。
ビューは、ディスプレイごとに「クエリ結果」キャッシュと「レンダリングされた出力」キャッシュの2つの時間ベースのキャッシュレイヤーを公開します。各キャッシュに含まれる生データの詳細は明確ですが、それらの相互作用方法は明確ではありません。レンダリングされたキャッシュへのヒットがクエリキャッシュを完全にバイパスするのか、2つのレイヤーが別々に動作するのか、私は特に疑問に思っています。私は(のような旧主張するいくつかの参照見てきたこの1を)、および(のように後者を主張しているいくつかのこの1)。
理論1-個別のキャッシュレイヤー
最初は、各レイヤーが別々に「連続して」呼び出され、レンダリングされた出力キャッシュがそのCID内の実際のクエリ結果をハッシュするという印象(および期待)を抱いていました。このようにして、新しいコンテンツがビューに即座に反映されるようにしながら、最も負荷の高いクエリ後のロード/ビルド作業をキャッシュするエレガントな方法があります( "クエリ結果"キャッシュがオフで、 "レンダリングされた出力"キャッシュがオン)。いくつかの簡単なテストは、レンダリングされた出力キャッシュが現在のクエリ結果を認識していない可能性があるため、これは不可能かもしれないことを明らかにしています。
理論2-レンダリングされた出力キャッシュがクエリ結果キャッシュを「包括」する
もう1つの可能性は、レンダリングされた結果キャッシュが、クエリ自体(結果ではない)のハッシュによってキー設定されることです。この場合、ヒットすると、クエリキャッシュやDBを参照する必要なく、レンダリングされた出力を直接返すことができます。これが事実である場合、「レンダリングされた結果」キャッシュよりも短い時間間隔で「クエリ結果」キャッシュを設定することはあまり意味がないと思います。もちろん、利点は、DBへの直接クエリを回避しながら、レンダリングされた出力をより頻繁に更新できることです(多くの動的テーマロジックまたは頻繁なエンティティ更新がある場合)。ただし、最も複雑なビュークエリを除くすべての場合、この種類の分離はそれほど有利に思えません。
理論2を指す「ブラックボックス」テストをいくつか実行しましたが、他にいくつかの設定が機能しているかどうか、またはビューのバージョンによって答えが異なるかどうかはわかりません。私もコードを少し調べましたが、ほとんどのビューのプラグインメソッドがドキュメント化されておらず、たまに追跡するのが難しいことがイライラしています。とにかく、これに対する答えは、他の人の参考資料として役立つと思います。