Ich möchte, dass Seiten weiterhin vom Drupal 8-Caching-Mechanismus für anonyme Benutzer profitieren, mit Ausnahme bestimmter Blöcke, die bei jeder Seitenaktualisierung aktualisiert werden sollten, da sie aus Ansichten generiert werden.
Ist es technisch möglich? Wie?
Antworten:
Was zeigt dieser Ansichtsblock?
D8 verfügt über Cache-Tags und Kontexte, die den Block automatisch ungültig machen, wenn sich etwas ändert.
Wenn Sie also eine Liste von Knoten haben, wird dieser Block jedes Mal aktualisiert, wenn ein Knoten hinzugefügt oder aktualisiert wird. Bis dahin wird jedoch die zwischengespeicherte Version verwendet. Was viel besser ist, als auf jeder Seite neu zu erstellen.
Es funktioniert auch mit dem Seiten-Cache. Diese Seiten werden ebenfalls automatisch aktualisiert.
Viele, viele Dinge funktionieren einfach mit dem sofortigen Zwischenspeichern, ohne dass manuelle Konfigurationen erforderlich sind.
Bearbeiten (auf Kommentar antworten):
Zufällig mit dem Zufallssortier-Plugin? Das sollte diesen Block automatisch als nicht zwischenspeicherbar markieren. Dies hat jedoch keine Auswirkungen auf das Seiten-Cache-Modul. Es gibt jetzt ein neues Smartcache / Dynamic Page Cache-Modul, das jedoch erst in der nächsten Beta (oder RC!) Bereitgestellt wird. Dadurch können Sie den Rest der Seite zwischenspeichern und nur diesen Teil erstellen.
Aber ein Fall wie dieser lässt sich wahrscheinlich am besten mit Javascript implementieren. Wenn es nur wenige Knoten gibt, können Sie sie alle anzeigen, standardmäßig ausgeblendet und nur zufällig einen von ihnen sichtbar machen. Oder fordern Sie eine URL mit Javascript an, die eine zufällige Anzeige zurückgibt, oder besuchen Sie besser eine zufällige Anzahl von N URLs, die jeweils eine Anzeige zurückgeben (z. B. indem Sie eine Liste von URLs zurückgeben und dann eine davon auswählen. Sie können dies sogar direkt für die Bild-URL tun .
quelle
Wenn dies ein benutzerdefinierter Block ist, können Sie die Cache-API verwenden und das maximale Alter des Caches auf 0 setzen, z
Wenn es sich um einen vorhandenen Block handelt, können Sie ihn ändern, um ihn dem Render-Array hinzuzufügen.
quelle