Frage

Ich schreibe den Katalog -Produktlistenblock für das Caching -Problem neu. Bitte überprüfen Sie den Code und geben Sie Ihre Ratschläge zur Verbesserung von Caching- und Cache-validierenden Problemen für riesige Seiten für riesige Produktlistenkategorien. Wer hat eine bessere Konfiguration für Caching -Blöcke wie dieses?

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
}
War es hilfreich?

Lösung

Es wäre besser, die außer Kraft zu setzen getCacheKeyInfo() Methode statt von getCacheKey().

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

Das Hashing des Wertes wird automatisch gepflegt.
Dadurch werden wichtige Daten wie die aktuelle Speicheransicht, das Thema und die verwendete Vorlage enthalten.

Im Allgemeinen wird die Anforderung URI für Cache -Schlüsselzwecke nicht als ideal angesehen, da es viele Faktoren gibt, die die Ausgabe der Blöcke beeinflussen könnten, die nicht im URI enthalten sind.

Wenn die Blockausgabe beispielsweise die Preise enthält tax_class_id) im Cache -Key -Info -Array.

Es kann auch mehrere Permutationen der Anfrage -URI geben, die alle auf dieselbe Seite verweisen, beispielsweise mit einem Nachverfolgung / und ohne. Es führt im Allgemeinen zu besseren Ergebnissen, um das Cache -Schlüsselarray manuell zu erstellen.

Stellen Sie für die Cache -Tags auch die Cache -Tags aller angezeigten Produkte ein (bereits in 1.8/1.13).

Ich würde auch empfehlen, einen vollseitigen Cache zusätzlich zum Stimmen von Blockdaching zu verwenden.

Andere Tipps

Riesige Produktlistenkategorie Seiten

Vielleicht ein deterministischer Algorithmus wie Monte Carlo ist ein guter Ausgangspunkt. Zum Beispiel können Sie mit einer Wahrscheinlichkeit von (10% * isHishardtodofactor) einspeichern. Nachdem Sie das Produkt 10 -mal mit einem normalen ISHishardtodofactor gezeigt haben, haben Sie eine hohe Chance, dass es versucht, zu zwischenstrahlen. Wenn es nur ein- oder zweimal (beim Testen) gezeigt wird, hat es eine geringe Chance, Ihren Cache zu füllen. Machen Sie auch das TTL ein bisschen zufällig, Sie möchten nicht, dass viele Cache -Einträge genau zur gleichen Zeit ablaufen.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top