Türchen 22: Magento Block Caching
Türchen 22 ist ebenfalls etwas besonderes. Auch dieser Beitrag ist als Weihnachtsgeschenk an uns aus der Feder von Vinai entsprungen: Da Magento ohne Caching nur schlecht skaliert lohnt es sich in der Regel das Caching-Verhalten einer Seite zu optimieren. Wie ein Block gecached wird bestimmen drei Eigenschaften der Block Klasse:
1.) Die Lebenszeit
Durch die Eigenschaft cache_lifetime wird die Gültigkeitsdauer des Cache-Eintrags bestimmt, angegeben in Sekunden. Wird der Wert 0 oder false gesetzt, wird die Block-Ausgabe für immer gecached. Um das Caching für einen Block zu deaktivieren muss der Wert auf null gesetzt werden. Die Cache Lifetime kann bei vielen Blöcken auf gut via Layout XML gesetzt werden:
<reference name=“name.des.blocks“> <action method=“setCacheLifetime“<sec>3600</sec></action> </reference>
So können viele Blöcke bei Bedarf gecached werden ohne das sie via <rewrite> überschrieben werden müssten. Der Default-Wert für cache_lifetime ist bei den meisten Blöcken null (deaktiviert).
2.) Der Cache Key
Der Cache Key identifiziert eindeutig einen Block-Cache-Eintrag. Sollen mehrere Variationen eines Blocks gecached werden, beispielsweise eine für jede Sprache, so muss sich die Eigenschaft cache_key für jede der Varianten unterscheiden. In der Regel wird letzteres erreicht in dem die aktuelle Store Id als Teil des Cache-Key gesetzt wird.
Seit Magento 1.4 wird der Cache-Key eines Blocks aus den Elementen des von der Methode getCacheKeyInfo() zurückgelieferten Arrays aufgebaut. Der Default Cache-Key eines Blocks ist der Name im Layout XML.
3.) Die Cache Tags
Die Cache Tags eines Blocks sind ein Array von Strings. Sie dienen dazu den Cache-Pool von Magento zu segmentieren. So kann z.B. der HTML Block-Cache gelöscht werden, ohne das der Konfigurations Cache-Pool davon beeinflusst wird. Als Default-Wert für die Cache-Tags wird array(‘block_html’) verwendet. Meistens ist das so ausreichend, unter Umständen kann es jedoch hilfreich sein den Cache weiter zu segmentieren. Zum Beispiel könnte ein komplexer Navigations-Block mit den Cache-Tags array(‘block_html’, ‘navi’) gecached werden. Jedes mal wenn sich etwas an der Datenstruktur ändert, aus dem die Navigation aufgebaut wird, kann dann gezielt nur der Navi-Cache aktualisiert werden: Mage::app()->cleanCache(array(‘navi’));
Der Autor
Vinai Kopp arbeitet seit Oktober 2011 als Manager of Developer Education für Magento Inc. Vorher war er als freier Magento Entwickler und Berater tätig, mit dem Schwerpunkt Entwicklerschulung. Desweiteren ist er Co-Autor des Magento Entwicklerhandbuchs, erschienen im O'reilly Verlag.




[...] Die Lösung habe ich in einer Serie von Blog-Einträgen für Weihnachten gefunden: http://www.webguys.de/magento/turchen-22-magento-block-caching/ [...]