Magento Performance Optimierung durch Caching der Blöcke

von Roman Hutterer, 24. Juli 2014

Caching ist ein wesentliches Merkmal von Magento zur Optimierung der Performance.

Magento bietet standardmäßig Caching für Layouts-, Blöcke und deren HTML, Übersetzungen, Entitäten und Entitätsattribute, Collections und-Konfigurationen.

Die Verarbeitung von Layoutupdates aus mehreren XML-Dateien sowie das Laden und Zusammenführung von Konfigurationsdaten aus XML-Dateien und der Datenbank benötigt erhebliche Resourcen und Ausführungszeit. Caching bietet einen Mechanismus um diese Daten zu speichern und so diese Resource einzusparen.

Magento enthält bereits in der Commmunity Version ein sehr umfangreiches Cache Modul. Als Cache Backend kann dabei z.B. einfach das Filesystem, APC oder Memcache dienen. Um den Nutzen zu optimieren, sollte man natürlich versuchen, den Cache komplett im Hauptspeicher vorzuhalten.

Auch wenn man es vermuten könnte, standardmäßig wird die HTML Ausgabe eines Blocks in Magento nicht gecachet. Man muss explixit angeben, dass ein Block gecachet werden soll.
In der Community Version von Magento werden in der in der aktuellen Version (1.7.) lediglich folgende Blöcke gecachet:

  • Mage_Catalog_Block_Navigation
  • Mage_Catalog_Block_Product_New
  • Mage_Page_Block_Html_Footer

 

Um die HTML Ausgabe eines Blocks zu cachen, gibt es zwei Vorgehensweisen (siehe Magento Wiki):

  1. 1. über layout xml siehe den Aufruf der Methode „setCacheLifeTime“ mit Parameter „sec“:
  2. 2. über den Konstruktor in der Blockklasse

Wie man sieht wird die Cache-Lifetime in Sekunden angegeben und es werden Cache-Tags vergeben.
Was es mit den Cache-Tags aufsich hat ist ganz einfach:
Die Angabe des Cache Tags ist entscheidend, wenn es darum geht, wann der Cache geleert wird.
Im Magento Backend kann man entweder den kompletten Cache oder einzelne Caches leeren.

Folgende Cache Tags sind standardmäßig vorhanden:


Ob ein Block aus dem Cache geladen werden kann, wird in der Klasse Core_Block_Abstract gesteuert.
Hier der Auszug des Codes der dafür zuständig ist:

und

Die Cache Funktionalität ist also sehr einfach zu verwenden und da Magento nicht unbedingt für sein Resourceseinsparendes verhalten bekannt ist, sollte man den Cache eigentlich überall nutzen wo es möglich ist.