2012-08-14 83 views
3

今天我意識到Magento對我的memcached服務器做了很多相同的請求,它要求密鑰Zend_LocaleC_en_GB_currencynumber_。你有誰知道它在哪裏產生,我該如何改進?這可能與渲染價格框有關,但我不明白爲什麼它是一個頁面中的50倍。謝謝,Jaro。Magento - 許多相同的緩存請求

編輯: 到目前爲止,我沒有速戰速決 Zend_Cache_Backend_Memcached ::負載

public function load($id, $doNotTestCacheValidity = false) 
{ 
    if (isset($GLOBALS[$id])) { 
     return $GLOBALS[$id]; 
    } 

    $tmp = $this->_memcache->get($id); 
    if (is_array($tmp) && isset($tmp[0])) { 
     $GLOBALS[$id] = $tmp[0]; 
     return $tmp[0]; 
    } 
    return false; 
} 

這不是很好,但似乎工作。 memcached服務器至少有很多請求消失。哈羅。

回答

2

這是Zend Framework社區中已知的問題之一。它甚至被報告爲1.0.3版本的改進版本(http://framework.zend.com/issues/browse/ZF-2311)。

您修復了Magento的意義,這裏對Zend_Currency執行了很多調用,並且連接到memcached時有一些限制或足夠慢。

例如在大多數項目中,我們使用的是memcached,並沒有經歷過這種調用頁面加載時間過大的損失。

但是你可以在Magento解決它,以與ZF解決方法:

  1. 重寫核心/語言環境模型的模塊中

  2. 覆蓋貨幣()方法

    public function currency($currency) 
    { 
        if (!isset(self::$_currencyCache[$this->getLocaleCode()][$currency])) { 
         $currencyObject = parent::currency($currency); 
         $currencyObject->setFormat(array(
          'format' => Zend_Locale_Data::getContent($this->getLocale(), 'currencynumber') 
         )); 
         return $currencyObject; 
        } 
        return parent::currency($currency); 
    } 
    
+0

我認爲保存任何容易達到的毫秒是有意義的。所以這應該肯定是核心解決方案的一部分。 – Jaro 2012-08-17 09:01:50

+0

@Jaro由於這個bug被標記爲不會在ZF中修復,所以核心團隊可能會忽略它,他們沒有看到這樣的小改進,特別是對於有FPC模塊的企業客戶。 – 2012-08-17 09:58:47