2012-08-14 94 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