アプリケーション全体を通して、これに非常によく似たものがあります。
$cache = App_Cache::getInstance()->newObject(300);
$sig = App_Cache::getCacheName(sha1($sql));
$res = $cache->load($sig);
if ($res === false) {
$res = $db->fetchAll($sql);
$cache->save($res, $sig);
}
現時点での問題は、毎回 Zend_Cache の新しいオブジェクトを作成することになり、リクエストごとにこれが 300 回以上呼び出される可能性があることです。
class App_Cache {
protected static $_instance = null;
public static $enabled = true;
protected $frontend = null;
protected $backend = null;
protected $lifetime = null;
public function __construct() { }
public static function getInstance() {
if (is_null(self::$_instance))
self::$_instance = new self();
return self::$_instance;
}
public function newObject($lifetime = 0) {
return Zend_Cache::factory('Core','Memcached',$this->getFrontend($lifetime),$this->getBackend());
}
public static function getCacheName($suffix) {
$suffix = str_replace(array("-","'","@",":"), "_",$suffix);
return "x{$suffix}";
}
Magentoでは、Concrete5が静的プロパティを作成する場合、__constructで一度作成するようです。
私の質問は、最善の解決策は何ですか?