Patrick Jürgens » Magento » Magento Full Page Caching und Personalisierung

Magento Full Page Caching und Personalisierung

Magento ist bekanntlich ein sehr Ressourcen-hungriges Shop System und wenn man im Web nach Performance Optimierungen sucht, findet man zahlreiche Tipps zur Verbesserung der Zugriffszeiten. Die meisten dieser Performance Optimierungen behandeln das Thema Caching.

Die Magento Bordmittel und Extensions

Im Standard verfügt Magento schon über zahlreiche Cache Systeme die unter anderem die Konfiguration und die Layout-Struktur zwischenspeichern. Neben diesen Backend-Systemen hat Magento auch zwei Frontend-Cache-Systeme die den HTML Output cachen: der Block Cache und der Full Page Cache (FPC).

Beim Block Cache werden, wie es der Name erahnen lässt, nur der HTML Output einzelner Blöcke gecacht. Über diesen Cache lassen sich so in der Kategorie Ansicht z.B. die Layer Navigation und die aufgelisteten Produkte zwischenspeichern. Personalisierte Bereichen werden nicht mit gecacht.

Im Gegensatz zum Block-Caching ist der FPC ein Enterprise Feature und nicht in der Community Edition (CE) enthalten. Auf dem Extension Markt gibt es aber zahlreiche Module, die für die CE einen FPC integrieren, wie z.B. Lasti und Zoom. Beim FPC werden nicht einzelne Fragment gespeichert, dieses Cache-System speichert die gesamte Seite. Das System schaut im Cache nach, ob der Response für die aufgerufene URL schon existiert, ist dies der Fall (Cache Hit) wird der Response einfach aus dem Zwischenspeicher aufgerufen. Dies hat den Vorteil, dass die Seite nicht mehr gerendert werden muss. Teure Datenbank-Operationen werden eingespart und die Kunden erhalten sehr schnell einen Response. In einem normalen Magento Shop, mit wenig Dynamik im Produktsortiment lassen sich

  • CMS-Seiten,
  • Kategorie- und
  • Detailseiten

hervorragend cachen. In diesen Bereichen kann man bis zu 4 mal schnelleren Zugriffszeiten erreichen.

Generell lassen sich zwei Arten von FPCs unterscheiden: Bei der einfachsten Art ist der FPC in den Code des Magento Systems integriert, zusätzliche Dienste oder Hardware werden nicht benötigt. Der Enterprise FPC, Lasti::FPC und Zoom wurden so entwickelt.  Die weit aus bessere Alternative stellt aber ein cachender Reverse Proxy dar. Bei dieser Lösung wird ein zusätzlicher Dienst meist auf dedizierter Hardware vor die Web-Server geschaltet. Das bekannteste Produkt für diese Art des Caching ist Varnish. Der Varnish ist ein Web-Beschleuniger, der als Cache fungiert. Er nimmt alle Anfragen entgegen und leitet sie an die Web-Server weiter. Anhand der Response Header die der Web-Server zurück sendet entscheidet der Varnish was er cacht. Wird eine gecachte URL erneut aufgerufen liefert der Varnish diese aus seinem Hauptspeicher aus. Die Web-Server werden nicht mehr belastet. Für mehr Informationen empfehle ich diesen Artikel.

Wie funktioniert die Personalisierung beim FPC

Unabhängig von diesen zwei Arten hat das Full Page Caching einen Nachteil: Personalisierungen sind nicht mehr so einfach möglich. So werden z.B. die Warenkorb- und Login-Informationen im Header-Bereich mit gespeichert. Viele FPC-Lösungen umgeben das Problem einfach in dem der Cache deaktiviert wird, sobald sich ein Kunde anmeldet oder einen Artikel in den Warenkorb legt hat. Somit läuft der Shop für nicht angemeldete Besucher, die keine Artikel im Warenkorb haben sehr schnell. Alle anderen surfen oft bis zu 4 mal langsamer.

Für einen Conversion optimierten Shop ist dieses Verhalten nicht akzeptabel, wie aber kann man den Performance-Gewinn des FPC und die Personalisierung unter eine Hut bringen?

Nachladen per JavaScript

In der Praxis hat sich aus meiner Sicht ein Verfahren durchgesetzt. Ob angemeldet oder nicht, jeder Nutzer erhält die identischen Webseiten, die Personalisierung wird einfach per JavaScript nachgeladen. Die Informationen hierzu können aus einem Cookie, dem Local Storage oder einem AJAX-Call kommen. Der Cookie lässt sich hervorragend über Magento Observer updaten und stellt die bessere Alternative dar.

Nachladen per Edge Side Includes

In einem Varnish Setup lässt sich zusätzlich zur oben beschriebenen Personalisierung mittels JavaScript noch Edge Side Includes (ESI) nutzen. Bei ESI werden im HTML Code spezielle ESI-Tags eingebettet, diese werden vom Varnish erkannt und an das Backend weitergeleitet. Hier ist beschrieben, wie Edge Side Includes funktionieren.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.