购物车价格规则导致“添加到购物车”和“结帐”按钮的速度显着下降。
我在两个地方找到了使用两种不同解决方案解决的问题:
我通过创建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);
}
Run Code Online (Sandbox Code Playgroud)
性能没有改善
另一个建议的解决方案是:
这建议覆盖product-> load()函数,但我不清楚他们建议如何/在何处执行此操作。我认为它不是app / code / core / Mage / Core / Model / Abstract.php的本地版本
有什么想法吗?
解决添加到购物车或结帐页面性能缓慢的问题的最佳方法是增强 Magento 使用的缓存机制。根据我的经验,实现超快速结账页面的最佳方法是用外部缓存服务器(如redis )替换内置的 Magento 缓存。
确实,购物车和结账相关的性能似乎会随着额外的价格规则而恶化,这主要是由于 Magento 在这方面的架构设计。Magento 为每个产品价格 X 客户群体 X 价格规则 X 等级定价(以及更多)创建新记录。因此,如果您一开始就有一个庞大的目录、数十个或数百个客户组以及数百个价格规则,那么价格表会呈指数级增长,并且结账会在多个层面上受到影响。希望这个问题能够得到解决,但不太可能很快得到解决。Redis是你的朋友。
另一种选择是允许添加到购物车或结帐并将交易记录在队列中,并稍后以生产者/消费者的方式处理实际订单。我对此很熟悉,对于超大型交易网站来说这是一个很好的方法,但它也带来了一些挑战。
如果您使用的是 Magento 1.8.xx CE 或更高版本:内置 Redis 缓存选项。如果您使用的是 1.7.xx 及更早版本,则需要Cm_Cache_Backend_Redis并且可以考虑Cm_RedisSession。
归档时间: |
|
查看次数: |
1496 次 |
最近记录: |