Magento 2: Wie mache ich ein Modul kompatibel mit Varnish Cache?

7

Diese Woche bemerkte ich einen interessanten Tweet (verlinkt von Ben Marks im Kommentar unten), der so etwas sagte:

Bitte machen Sie Ihre Magento 2-Module kompatibel mit Varnish, da es von Magento 2 CE sofort unterstützt wird

AFAIK, eine Sache zu tun ist die Implementierung der getIdentitiesMethode in den Blockklassen (siehe hier: Was ist IdentityInterface in Magento2 )

Abgesehen davon, muss noch etwas getan werden, um einen Magento 2-Modul-Lack kompatibel zu machen?

Raphael beim digitalen Pianismus
quelle
@benmarks danke dafür, Twitter-Suche ist manchmal Mist, ich suchte mit drei verschiedenen Schlüsselwörtern Kombination, konnte es nicht finden
Raphael bei Digital Pianism

Antworten:

11

Dies hängt davon ab, was Ihr Modul rendert. Es läuft darauf hinaus, keine private, kundenspezifische Datenserverseite zu rendern .
Die Ausnahme bilden vollständig nicht zwischengespeicherte Seiten (z. B. das Kundenkonto-Dashboad).

Zusammenfassend denke ich, dass es darauf ankommt, die Modulerstellung mit einer clientseitigen ersten Denkweise anzugehen. Es ist am besten anzunehmen, dass GET- und HEAD-Anforderungen niemals Magento erreichen werden. Daher ist es kein guter Ansatz, sich nur für Anpassungen auf Plugins oder Beobachter oder andere serverseitige Tools zu verlassen.

Einige Details, nach denen ich suchen würde, um zu überprüfen, ob ein Modul mit Varnish gut funktioniert:

Wenn die isPrivateScope()Blockmethode true zurückgibt, können private Daten gerendert werden, jedoch nur während der Ajax-Anforderung und nicht während des regulären Seiten-Renderings.
Andernfalls werden die privaten Daten im Ganzseiten-Cache gespeichert.

Der richtige Weg, um private Daten zu rendern, ist die Verwendung des clientseitigen Renderns mit den customer-dataModulen für private Inhalte, für die das Modul erforderlich ist Mage_Customer.

Dies kann mithilfe einer UI-Komponente oder eines regulären benutzerdefinierten Anforderungsmoduls erfolgen.
Wie das geht, ist nicht Teil der Frage, daher werde ich hier nicht auf Details eingehen.

Die Implementierung von IdentityInterfaceist nur wichtig, damit der Cache zum richtigen Zeitpunkt geleert wird. Je nachdem, was Ihr Modul rendert, ist dies möglicherweise nicht einmal erforderlich.

Eine andere Sache, die ich für wichtig halte, damit ein Modul lackkompatibel ist, ist cacheable="false", keiner vorhandenen Seite einen Block hinzuzufügen . Das Hinzufügen neuer nicht zwischengespeicherter Seiten kann je nach Seitentyp in Ordnung sein.

Vinai
quelle
1
Ok, danke dafür, dass ich mehr "Arbeit" erwartet hatte, aber ich bin damit zufrieden =)
Raphael bei Digital Pianism
1
zu schnell ...... :)
Keyur Shah
Ich bin mir immer noch nicht sicher über das Schicksal von isPrivateScope () laut devdocs.magento.com/guides/v2.1/config-guide/cache/… es ist veraltet
Kristof bei Fooman
Ja, es funktioniert und wird irgendwo vom Kern verwendet. Ich denke, die Dokumente geben an, dass es aufgrund des etwas überraschenden Verhaltens ohne Detaillierung hässlich ist, zwischen zwischengespeicherten und nicht zwischengespeicherten Inhalten in toHtml () unterscheiden zu müssen. Sie haben es im Code noch nicht einmal als veraltet markiert.
Vinai