添加购物车价格规则后,Magento 性能下降

标签 magento

购物车价格规则导致“添加到购物车”和“结帐”按钮显着放缓。

我发现在两个地方解决了这个问题,有两种不同的解决方案:

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

这建议覆盖 product->load() 函数,但我不清楚他们建议如何/在何处执行此操作。我认为它不是本地版本的 app/code/core/Mage/Core/Model/Abstract.php

有什么想法吗?

最佳答案

解决添加到购物车或结帐页面性能缓慢的最佳方法是增强 Magento 使用的缓存机制。根据我的经验,实现超快速结帐页面的最佳方法是将内置的 Magento 缓存替换为像 redis 这样的外部缓存服务器。 .

确实,购物车和结账相关的性能似乎随着额外的价格规则而恶化,这主要是由于 Magento 在这方面的架构设计。 Magento 为每个产品价格 X 客户群 X 价格规则 X 层定价(以及更多)创建一个新记录。因此,如果您有一个庞大的目录、数十个或数百个客户群以及数十个数百个价格规则,则价格表会呈指数级增长,并且结帐会在多个级别上受到影响。希望这会得到解决,但不太可能很快。 Redis是你的 friend 。

另一种选择是允许添加到购物车或结帐并将交易记录在队列中,然后以生产者/消费者的方式处理实际订单。我对这方面的第一手资料很熟悉,对于超大型交易网站来说,这是一种很好的方式,但它也带来了一些挑战。

如果您使用的是 Magento 1.8.x.x CE 或更高版本:内置 Redis 缓存选项。如果您使用的是 1.7.x.x 及更早版本,则需要 Cm_Cache_Backend_Redis你可以考虑Cm_RedisSession .

关于添加购物车价格规则后,Magento 性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549111/

相关文章:

magento - 自定义客户属性未保存到数据库(来自前端注册表单)

Magento 产品占位符图片

magento - 在 magento 中添加新的系统属性

php - block 和模板如何在 Magento 中工作

php - Magento 如何检查购物车是否为空?

session - 无法登录 Magento 管理员

magento - Magento:如何在左侧边栏中显示类别说明?

mysql - Magento:将 PDO 结果变成 Varien 对象

php - 付款方式支票/汇票未显示在结帐页面中

Magento 产品加载 - loadByAttribute 和 load 方法之间的区别