Производительность Magento снижается с добавлением правил цен в корзине - PullRequest
4 голосов
/ 18 декабря 2011

Правила цены корзины покупок приводят к значительному замедлению работы кнопок Добавить в корзину и Оформить заказ.

Я обнаружил, что проблема решена в двух местах с двумя различными решениями:

http://www.magentocommerce.com/answers/discussion/1997/Huge-performance-problem-with-shopping-cart-price-rules-in-large-volumes-3000-5000-coupons/p1

Я попробовал описанное выше, создав локальную копию app / code / local / Mage / SalesRule / Model / Rule / Condition / Product.php и переписал функцию проверки с помощью:

 public function validate(Varien_Object $object)
{
    if(!Mage::registry("rule_condition_product_".$object->getProductId()))
    {
        $product = Mage::getModel('catalog/product')
                    ->load($object->getProductId());
        Mage::register("rule_condition_product_".$object->getProductId(),$product);
    }

        $product = Mage::registry("rule_condition_product_".$object->getProductId());

        $product->setQuoteItemQty($object->getQty())
                ->setQuoteItemPrice($object->getPrice())
                ->setQuoteItemRowTotal($object->getRowTotal());

    return parent::validate($product);
}

улучшения производительности не было

другое предлагаемое решение:

http://www.neptuneweb.com/blog/29-improving-magento-checkout-performance-with-large-number-of-cart-rules.html

это предполагает переопределение продукта-> load ()функции, но мне не ясно, как / где они предлагают это сделать.Я предполагаю, что это не локальная версия app / code / core / Mage / Core / Model / Abstract.php

Есть мысли?

1 Ответ

0 голосов
/ 02 октября 2013

Лучший способ справиться с вялой производительностью страниц «Добавить в корзину» или «Оформить заказ» - улучшить механизмы кэширования, которые использует Magento. Исходя из моего опыта, лучший способ добиться сверхбыстрых страниц оформления заказа - заменить встроенный кеш Magento внешним сервером кеша, таким как redis .

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

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

Если вы используете Magento 1.8.xx CE или выше: встроена опция кэширования Redis. Если вы используете 1.7.xx и более ранние версии, вам понадобится Cm_Cache_Backend_Redis , и вы можете рассмотреть Cm_RedisSession .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...