Zunächst versuche ich, die Sorgfaltspflicht sicherzustellen und keine doppelten Fragen zu stellen, die zuvor gestellt wurden. Es gibt zahlreiche Beiträge zu Stackexchange und zu verschiedenen anderen Stellen, in denen das Zwischenspeichern von Ansichten und sogar einige Besonderheiten der verschiedenen Arten von Ansichts-Caches (z. B. hier und hier ) erläutert werden . Ich habe jedoch noch keine Details gefunden, die die Beziehungen zwischen verschiedenen Ebenen des Zwischenspeicherns von Ansichten und die möglichen Auswirkungen auf fallspezifische Caching-Entscheidungen ausreichend erklären . Der Einfachheit halber konzentriere ich mich im Rahmen dieser Frage auch auf sofort einsatzbereite 7.x-3.x-Caching-Optionen, unabhängig von anderen Ebenen, die im Contrib-Bereich angeboten werden.
Views stellt zwei Ebenen des zeitbasierten Caching für jede Anzeige bereit, einen Cache "Abfrageergebnisse" und einen Cache "gerenderte Ausgabe". Die Einzelheiten darüber, welche Rohdaten jeder Cache umfasst, sind klar, die Art und Weise, wie sie interagieren, jedoch nicht. Ich frage mich speziell, ob ein Treffer im gerenderten Cache den Abfrage-Cache vollständig umgeht oder ob die beiden Ebenen separat arbeiten. Ich habe einige Referenzen gesehen, die das erstere beanspruchen (wie dieses ), und einige, die das letztere beanspruchen (wie dieses hier ).
Theorie 1 - Separate Cache-Ebenen
Ich war zunächst unter dem Eindruck (und hoffen) , dass jede Schicht einzeln „in der Reihe“ aufgerufen wird, und dass die gerenderte Ausgabe - Cache - Hashes die eigentliche Abfrage Ergebnisse innerhalb seiner cids. Auf diese Weise hätte ich eine elegante Möglichkeit, die teuerste Lade- / Erstellungsarbeit nach der Abfrage zwischenzuspeichern und gleichzeitig sicherzustellen, dass neuer Inhalt sofort in der Ansicht angezeigt wird (Cache "Abfrageergebnisse" aus und Cache "gerenderte Ausgabe" ein ). Einige schnelle Tests haben ergeben, dass dies möglicherweise nicht möglich ist, da der gerenderte Ausgabecache möglicherweise nicht über die aktuellen Abfrageergebnisse informiert ist.
Theorie 2 - Der gerenderte Ausgabecache "umfasst" den Abfrageergebniscache
Die andere Möglichkeit besteht darin, dass der gerenderte Ergebniscache durch einen Hash der Abfrage selbst (nicht durch die Ergebnisse) verschlüsselt wird. Wenn dies der Fall wäre, könnte ein Treffer die gerenderte Ausgabe direkt zurückgeben, ohne den Abfragecache oder die Datenbank zu konsultieren. Wenn dies der Fall wäre, wäre es wahrscheinlich nicht sinnvoll, den Cache "Abfrageergebnisse" mit einem Zeitintervall festzulegen, das kleiner ist als der Cache "Gerenderte Ergebnisse". Der Vorteil wäre natürlich, dass man die gerenderte Ausgabe häufiger aktualisieren könnte (wenn sie viele dynamische Themenlogik oder häufige Entitätsaktualisierungen haben), während direkte Abfragen an die Datenbank vermieden werden. Für alle außer den komplexesten Ansichtsabfragen scheint diese Art der Trennung jedoch nicht allzu vorteilhaft zu sein.
Ich habe einige "Black-Box" -Tests durchgeführt, die auf Theorie 2 verweisen, bin mir jedoch nicht sicher, ob andere Einstellungen im Spiel sind oder ob die Antwort je nach Ansichtsversion unterschiedlich ist. Ich habe den Code auch ein wenig untersucht, aber ich finde es frustrierend, dass die Plugin-Methoden der meisten Ansichten nicht dokumentiert und gelegentlich schwer zu befolgen sind. Egal was, ich denke, die Antwort darauf wäre nützlich, um sie als Referenz für andere zu haben.