2011-12-18 57 views
3

購物車價格規則導致添加到購物車和結算按鈕的速度顯着下降。隨着購物車價格規則的增加,Magento性能下降

我發現這個問題在兩個地方涉及兩種不同的解決方案:

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

我嘗試了上面創建的應用程序/代碼/本地/法師/ SalesRule /型號的本地副本

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); 
} 

有性能

01沒有任何改善:/Rule/Condition/Product.php
並在與寫的驗證功能

其他建議的解決方案是:

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

有什麼想法?

回答

0

解決添加到購物車或結帳頁面的性能不佳的最佳方法是通過增強Magento使用的緩存機制。根據我的經驗,實現超快速結賬頁面的最佳方式是將內置的Magento緩存替換爲外部緩存服務器,如redis

確實,購物車和結賬相關的表現似乎隨着額外的價格規則而惡化,這主要是由於Magento在這方面的建築設計。 Magento爲每個產品價格創建新記錄X個客戶羣體X價格規則X層次定價(以及更多)。所以,如果你有一個大的目錄開始,數十個或數百個客戶羣和幾十個價格規則,價格表會呈指數增長,並且結賬受到多個層次的影響。希望這會得到解決,但不太可能很快。 Redis是你的朋友。

另一種選擇是允許添加到購物車或結帳並將交易記錄在隊列中,並稍後以生產者/消費者的方式處理實際訂單。我對這個第一手很熟悉,這是一個非常大的交易網站的好方法,但它也引入了一些挑戰。

如果您使用的是Magento 1.8.x.x CE或更高版本:內置Redis緩存選項。如果您使用的是1.7.x.x及之前的版本,則需要使用Cm_Cache_Backend_Redis,並且您可能會考慮使用Cm_RedisSession

相關問題