Вопрос

Я переписываю блок списка продуктов в каталоге для проблемы кэширования. Пожалуйста, просмотрите код и дайте вашим советам по улучшению кэширования и вопросов, обеспечивающих кэш-акционер, для огромных страниц категорий листинга продуктов. У кого есть лучшая конфигурация для такого кэширования блоков?

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
}
Это было полезно?

Решение

Было бы лучше переопределить getCacheKeyInfo() Метод вместо getCacheKey().

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

Хэширование значения заботятся автоматически.
Это позаботятся о важных данных, таких как текущий представление магазина, тема и используемый шаблон включены.

Как правило, запрос URI не считается идеальным для целей ключей кэша, поскольку существует много факторов, которые могут повлиять на выход блоков, которые не содержатся в URI.

Например, если результат блока содержит цены, обязательно включите идентификатор группы клиентов (связанный с клиентом tax_class_id) в массиве информации о ключе кэша.

Также может быть несколько перестановков запроса URI, которые все относятся к одной и той же странице, например, с помощью следа / без. Как правило, это приводит к лучшим результатам для создания массива ключей кеша вручную.

Для тегов кэша обязательно включите теги кэша всех отображаемых продуктов (уже сделанные в 1,8/1.13).

Я также рекомендую использовать полный кеш страниц в дополнение к кэшированию блока настройки.

Другие советы

Огромные страницы категорий листинга продуктов

Может быть, детерминированный алгоритм, как Monte Carlo хорошая отправная точка. Например, вы можете кэшировать с вероятностью (10% * ISTHISHARDTODOFACTOR). После показа продукта 10 раз с обычным Istishardtodofactor, у вас есть высокая вероятность, что он попытается кэшировать. Если он показывается только один или два раза (во время тестирования), у него низкий шанс заполнить ваш кеш. Также сделайте TTL немного случайным, вы не хотите, чтобы много записей кеша истекает в одно и то же время.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top