Türchen 22: Magento Block Caching

22.12.2010   //   von Vinai Kopp   //   Adventskalender, Entwicklung, Magento  //  1 Kommentar

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.

1 Kommentar

Kommentar schreiben

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

Magento-Support

Sie benötigen kurzfristig Unterstützung in einem Magento-Projekt oder möchten eine individuelle Extension einsetzen? Sprechen Sie uns an.