Question

Je récrire bloc de la liste des produits de catalogue pour la mise en cache question. S'il vous plaît code revue et donner vos conseils pour améliorer la mise en cache et les problèmes de cache-validation des produits liste énorme pages catégorie. Qui a une meilleure configuration pour les blocs de mise en cache comme ça?

class Ssd_Fix_Block_Catalog_Product_List extends Mage_Catalog_Block_Product_List
{
    const CACHE_TAG = 'CATEGORY_PRODUCTS';

    public function getCacheKey()
    {
        $url = md5(Mage::app()->getRequest()->getOriginalRequest()->getRequestUri());
        if (!$this->_cache_key) {
            $key              = "CATEGORY_PRODUCTS_" . $url;
            $this->_cache_key = $key;
        }
        return $this->_cache_key;
    }

    public function getCacheTags()
    {
        $data = array(self::CACHE_TAG);
        if ($category = Mage::registry('current_category')) {
            $data[] = Mage_Catalog_Model_Category::CACHE_TAG . "_" . $category->getId();
        }
        if (count($products = $this->getProductList())) {
            foreach ($products as $p) {
                $data[] = Mage_Catalog_Model_Product::CACHE_TAG . "_" . $p->getId();
            }
        }
        return $data;
    }

    public function getCacheLifetime()
    {
        return 60 * 60 * 24;
    }

    //other methods here
}
Était-ce utile?

La solution

Il serait préférable de remplacer la méthode de getCacheKeyInfo() au lieu de getCacheKey().

public function getCacheKeyInfo()
{
    $info = parent::getCacheKeyInfo();
    // Add any additional data you want
    $info[] = Mage::app()->getRequest()->getOriginalRequest()->getRequestUri();
    return $info;
}

Le hachage de la valeur est prise en charge automatiquement.
Cela va prendre soin des données importantes comme la vue magasin actuel, le thème et le modèle utilisé sont inclus.

En général, l'URI demande n'est pas considéré comme idéal pour des fins de clés de cache, car il y a de nombreux facteurs qui pourraient influencer la sortie des blocs qui ne sont pas contenus dans l'URI.

Par exemple, si la sortie du bloc contient les prix, assurez-vous d'inclure l'ID du groupe de clients (lié à la tax_class_id du client) dans le tableau de clé de cache d'information.

Il peut aussi y avoir plusieurs permutations de l'URI de la requête que se réfèrent tous à la même page, par exemple avec un arrière / et sans. Il généralement conduit à de meilleurs résultats pour construire le tableau de clé de cache manuellement.

Pour les balises de cache, assurez-vous d'inclure les balises de cache de tous les produits affichés, trop (déjà fait dans 1,8 / 1,13).

Je vous recommande également d'utiliser un cache de page complète, en plus de la mise en cache de bloc d'accord.

Autres conseils

grande pages catégorie offre de produit

Peut-être un algorithme déterministe comme Monte Carlo est un bon point de départ. Par exemple, vous pouvez mettre en cache avec une probabilité de (10% * isThisHardToDoFactor). Après avoir montré le produit 10 fois avec un isThisHardToDoFactor normal, vous avez une grande chance qu'il va essayer de cache. Si elle est seulement montré une ou deux fois (lors du test), il a une faible chance de remplir votre cache. Assurez-vous également l'un TTL bit aléatoire, vous ne voulez pas beaucoup d'entrées de cache expire exactement en même temps.

https://en.wikipedia.org/wiki/Monte_Carlo_algorithm

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top