Werden Ansichten über die zentralen Caching-Mechanismen zwischengespeichert, oder sollte das Caching direkt in jeder Ansicht festgelegt werden?

23

Ich sehe, dass es in jeder meiner Ansichten Cache-Einstellungen gibt. Muss ich diese Einstellungen vornehmen oder werden sie von den Core-Caching-Mechanismen in / admin / config / development / performance automatisch vorgenommen, und diese "zusätzlichen Einstellungen" in Ansichten gelten, wenn ich das Standard-Caching-Verhalten von Drupal Core überschreiben möchte?

Bildbeschreibung hier eingeben

Nigel Waters
quelle
Ich bin neugierig auf diese genaue Frage. Überschreiben die Cache-Einstellungen von Views die Performance-Caching-Einstellungen von Drupal Core? Logischerweise würde ich denken, dass dies der Fall ist, aber das kann nicht unbedingt angenommen werden.
David Csonka
Dafür habe ich ein Kopfgeld gezahlt, weil ich das wirklich gerne besser verstehen würde.
David Csonka

Antworten:

38

WAS: Im Core Performance Caching wird die gesamte gerenderte Seite mit einer Cache-ID der URL gespeichert und bereitgestellt. Das Zwischenspeichern von Ansichten geht darüber hinaus, um nur die Ansichtsausgabe zwischenzuspeichern.

WARUM: Es ist großartig für eingeloggte Benutzer. Andere Blöcke auf der Seite sind möglicherweise dynamischer, aber die Ansicht muss nicht jedes Mal eine Abfrage für jeden Benutzer ausführen. Nur der gelegentliche Benutzer, der den Seiten-Cache generiert, läuft nach Ablauf der Cache-Lebensdauer ab.

EINSTELLUNGEN: Das Zulassen, dass die "gerenderte Ausgabe" aktueller als die Abfrage ist, ist nützlich, wenn Sie Inhalte als neu markieren oder sie einfach abgleichen möchten .

BIG PICTURE: Drupal stellt Seiten dynamisch zur Verfügung und verwendet einen Server, um Seiten in PHP zu erstellen und auf eine Datenbank (oder einen speicherinternen Cache) zuzugreifen. Dies ermöglicht fantastische Funktionen und die Geschwindigkeit des Inhaltseditors ... aber der Kompromiss muss das Caching verstehen und es richtig machen.

MODULE!

Es gibt auch ein hübsches Modul für den Ansichts- Inhalts-Cache, das den Ansichts-Cache beim Bearbeiten von Inhalten löscht. Wenn Sie weiter gehen möchten, können Sie auch Cache-Aktionen auschecken . Ich empfehle Regeln , um dies zu optimieren.

Darüber hinaus können Sie mit Blockcache-Änderung für jeden Block auf Ihrer Site Optionen für die Zwischenspeicherung nach Rolle, Seite, Benutzer usw. festlegen.

Sie können auch hinzufügen Seite Manager und Panels . Auf diese Weise können Sie interessante Dinge tun, z. B. den Cache "pro Benutzer", "pro Rolle" oder eine Reihe anderer sehr nützlicher Konfigurationen festlegen. Obwohl ich persönlich Panels meide.

DOKUMENTATION: Informationen zum Caching und zur Leistung im Allgemeinen finden Sie auf der Drupal.org-Seite .

doublejosh
quelle
Diese Antwort ist wirklich gut. Aufgestimmt. Ich habe einen Abschnitt über Seitenmanager und Panels hinzugefügt, und jetzt könnte die Antwort größtenteils vollständig sein.
Letharion
Muss die Kernleistung "Caching blockieren" aktiviert sein, damit das Views-spezifische Caching funktioniert?
David Csonka
Vielen Dank, dass Sie ein bisschen über Page Manager / Panels hinzugefügt haben - denn nachdem ich die Kopfgelder dafür hinzugefügt hatte, wurde mir klar, dass ich auch neugierig auf das Zwischenspeichern von Mini-Panels war. Ich habe mich gefragt, ob die Kernleistung "Block-Caching" überschreibt oder aktiviert werden muss, damit das "Einfache Caching" für Mini-Panels wirksam wird.
David Csonka
1
Block-Caching würde in der Tat die Block-Ausgabe unabhängig von Ihren Einstellungen für das Caching von Ansichten zwischenspeichern ... genau wie der Seiten-Cache. Wenn Sie eine 12-stündige Lebensdauer des ausgeloggten Seiten-Caches haben, spielt der Ansichts-Cache keine Rolle, da diese Seiten nicht erneut gerendert werden, sondern nur aus dem Cache bereitgestellt werden.
DoubleJosh
1
Umgekehrt wird Drupal, wenn ich das Core-Block-Caching aktiviere, allen meinen Blöcken auf meiner gesamten Site die gleichen Caching-Bedingungen auferlegen, oder? Da Core Drupal Block Caching eine hohe Priorität gegenüber den Einstellungen für das Caching von Views Block hat? Dies scheint nur ein gutes Szenario zu sein, wenn Sie nicht über Inhalte verfügen, die möglicherweise konsistent aktualisiert werden müssen.
David Csonka
4

Views verwendet die Drupal-Cache-APIs, erstellt jedoch einen eigenen Cache, der nicht mit dem normalen Drupal-Seiten- / Block-Cache zusammenhängt.

Views speichert die View-Definition selbst zusammen mit der gerenderten View selbst im Cache. Die gerenderte Ansicht kann auf zwei Arten zwischengespeichert werden, entweder als Abfrageergebnis oder als tatsächlicher HTML-Code der Ansicht. Normalerweise möchten Sie den ausgegebenen HTML-Code zwischenspeichern, da dies die effektivste Leistung ist. In einigen Fällen, in denen Sie die Ausgabe basierend auf dem angemeldeten Benutzer ändern möchten, kann das Zwischenspeichern der Abfrage ebenfalls sehr effektiv sein.

Die Tabellen, die Views zum Speichern des Caches verwendet, sind:

  • cache_views
  • cache_views_data
googletorp
quelle
Kann ich die Drupal Core Block-Caching-Einstellung unter admin / config / development / performance deaktivieren, aber bestimmte Views-Anzeigeblock-Caches einzeln aktivieren, und diese Views-Block-Caches funktionieren trotzdem ordnungsgemäß?
David Csonka
1
@DavidCsonka Ja, das kannst du. Das Zwischenspeichern des Blocks wäre effektiver als das Zwischenspeichern der Ansicht, jedoch nur mit einem kleinen Abstand.
googletorp
Ahh, das ist gut zu wissen. Wenn ich jedoch nur die Einstellungen für das Zwischenspeichern von Ansichten verwende, kann ich genauer steuern, wie der Ansichtenblock zwischengespeichert wird, oder? Wenn ich stattdessen das Core-Block-Caching verwende, werden grundsätzlich für jeden Block auf meiner Site eine Reihe von Caching-Einstellungen festgelegt. Richtig?
David Csonka
1
Durch das Zwischenspeichern von Ansichten (Block oder Seite) können Sie das Zwischenspeichern der Ergebnisliste steuern. Beim Block-Caching handelt es sich um die vollständige Blockausgabe. Ja, das Core-Block-Caching ist eine standortweite Einstellung, aber Sie können Block-Cache-Alter verwenden, um dies sehr detailliert pro Block zu ändern.
DoubleJosh
3
@doublejosh In Drupal 7 können Sie definieren, wie der Blockcache arbeiten soll. Site-weit, pro Rolle, pro Seite, Seitenbenutzer sind die Optionen, die ich glaube. Da es auf einer höheren Ebene zwischengespeichert wird, ist die Leistung effektiver.
googletorp
3

Es gibt jetzt ein interessantes Modul namens " Views Cache Bully" , das automatisch alle Views (Abfrageergebnisse und Ausgabe) zwischenspeichert, mit Ausnahme von Views mit offengelegten Formularen. Mit dem Modul können Sie Ansichten auch manuell aus dem Caching ausschließen. Auf diese Weise können Sie das Caching für alle Ansichten (mit Ausnahme der ausgeschlossenen) von einem zentralen Punkt aus festlegen.

Dave Bruns
quelle
2

Drupal 7 bietet Seiten-Caching, das Seiten-Caching funktioniert jedoch nur für anonyme Benutzer und speichert keine Ansichten im Cache

Das Zwischenspeichern von Ansichten funktioniert jedoch sowohl für anonyme als auch für angemeldete Benutzer

Guy Schneerson
quelle