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 getIdentities
Methode 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?
magento2
cache
full-page-cache
varnish
Raphael beim digitalen Pianismus
quelle
quelle
Antworten:
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-data
Modulen für private Inhalte, für die das Modul erforderlich istMage_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
IdentityInterface
ist 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.quelle