Réduction du nombre de clés de cache avec Magento

magento_logo

Magento offre une grande souplesse pour la personnalisation du rendu front office. Chaque catégorie, chaque produit peut avoir un design personnalisé.
En contre-partie, il y a, à minima, autant de clés de cache que de pages CMS, catégories et produits. Si la personnalisation n'est pas utilisée, elle peut êtres désactivée pour améliorer les performances. Je vais donc vous montrer dans ce billet comment réduire les clés de cache pour le front office.

Réduction des clés de cache pour le front office

Nous allons créer un module qui va étendre Mage_Core.

Nous nous basons sur un observer défini dans la classe Mage_Core_Controller_Varien_Action. L'observer controller_action_layout_load_before, de la méthode loadLayoutUpdates, va nous permettre de supprimer certains identifiants des clés de cache.

Le fichier config.xml définit l'observer utilisé et la méthode à appeler.

<config>
    <modules>
        <Mymodule_Core>
            <version>1.0.0</version>
        </Mymodule_Core>
    </modules>
    <global>
        <models>
            <core>
                <rewrite>
                    <observer>Mymodule_Core_Model_Observer</observer>
                </rewrite>
            </core>
        </models>
    </global>
    <frontend>
        <events>
            <controller_action_layout_load_before>
                <observers>
                    <controller_action_layout_load_before_remove_handle>
                        <class>core/observer</class>
                        <method>removeHandle</method>
                    </controller_action_layout_load_before_remove_handle>
                </observers>
            </controller_action_layout_load_before>
        </events>
    </frontend>
</config>
config.xml

Il ne reste plus qu'à écrire notre fonction. Nous réduisons le nombre d'identifiants des clés de cache, mais sans excès.

class Mymodule_Core_Model_Observer extends Mage_Core_Model_Observer
{

    /**
     * Remove some handle to optimize (reduce) uniticy of layout cache key
     * 
     * @event controller_action_layout_load_before
     * @param Varien_Event_Observer $observer
     * @return \Mymodule_Core_Model_Observer
     */
    public function removeHandle(Varien_Event_Observer $observer)
    {
        $layout = $observer->getEvent()->getLayout()->getUpdate();

        $handles = $layout->getHandles();
        $typeRemoveHandles = array(
            'customer_logged_' => 'simple', 
            'STORE_' => 'simple',
            'CATEGORY_' => 'simple',
            '/^PRODUCT_[\d]*$/' => 'regexp', // we want just PRODUCT_[id] not PRODUCT_TYPE_[simple|...]
        );

        foreach ($handles as $handle) {
            foreach ($typeRemoveHandles as $removeHandle => $type) {
                if ($type == 'simple' && strpos($handle, $removeHandle) !== false) {
                    $layout->removeHandle($handle);
                } elseif ($type == 'regexp' && preg_match($removeHandle, $handle)) {
                    $layout->removeHandle($handle);
                }
            }
        }
        return $this;
    }
observer.php

Il ne reste plus qu'à activer le module puis vider le cache. Et voici le nombre de clés de cache drastiquement réduit ! Vous pouvez adapter, en fonction de vos besoins, les valeurs définies dans le tableau "$typeRemoveHandles".

Dans un prochain article, nous verrons comment masquer les onglets "Paramètres d'affichage" et "Design" des catégories" en back office.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.