3

今日、Magento が memcached サーバーに多くの同じリクエストを送信していることに気付きました。キーZend_LocaleC_en_GB_currencynumber_をリクエストしています。どこで生成され、どのように改善できるか知っている人はいますか? おそらく価格ボックスのレンダリングに関係しているのでしょうが、1 ページに 50 回ある理由がわかりません。ありがとう、ジャロ。

編集: これまでのところ、Zend_Cache_Backend_Memcached::load を簡単に修正しました

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 サーバーに対する要求の少なくとも多くが消失しました。ジャロ。

4

1 に答える 1

2

これは、Zend Framework コミュニティの既知の問題の 1 つです。1.0.3 リリース (http://framework.zend.com/issues/browse/ZF-2311) の改善としても報告されました。

Zend_Currency への多くの呼び出しが実行され、memcached への接続にいくつかの制限があるか、十分に遅い Magento の意味を修正します。

たとえば、memcached を使用しているほとんどのプロジェクトでは、この呼び出しでページの読み込み時間が大幅に減少することはありませんでした。

ただし、Magento で修正して、ZF で回避することができます。

  1. モジュールのコア/ロケール モデルを書き換える

  2. currency() メソッドをオーバーライドする

    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);
    }
    
于 2012-08-15T20:50:08.523 に答える