Категория ПРОДУКЦИЯ СПИСОК ПРОДОЛОЖЕНИЕ БЛОКЕ БОЛЬШЕ
-
16-10-2019 - |
Вопрос
Я переписываю блок списка продуктов в каталоге для проблемы кэширования. Пожалуйста, просмотрите код и дайте вашим советам по улучшению кэширования и вопросов, обеспечивающих кэш-акционер, для огромных страниц категорий листинга продуктов. У кого есть лучшая конфигурация для такого кэширования блоков?
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 немного случайным, вы не хотите, чтобы много записей кеша истекает в одно и то же время.