使用如下例子:
1 先关闭缓存
然后在任何一个控制器中添加一个方法加入如下代码:
1
2
$xml = Mage::getConfig()->getNode()->asXml();
file_put_contents('D:/config_file.xml', $xml);
在我这里,产生的文件大小为684K。这是一个非常让我吃惊的数字。如果每个请求都重复这个过程,如果100个同时请求,将吃掉68400K=68.4M内存,注意,这只是针对全局配置, 还没有包含布局系统等。
2 开启缓存
多次刷新刚才那个方法,发现产生的文件只有220K。
问题:为何会如此?比对先后两次产生的文件代码:
从缓存中获取的文件,admin adminhtml install stores crontab websites节点不见了。于是就产生了一个很大的困惑,如果开启了缓存,那么如何获取某个店铺的配置(因为缓存取回的配置没有店铺的设置)?
下面我们运行如下代码:
1
2
$xml = Mage::getConfig()->getNode('stores');
file_put_contents('D:/config_store.xml',$xml->asXml());
发现,它输出:
1
2
3
4
刚才消失的store节点这里获取出来了。
看起来,我们必须搞明白缓存对象干了什么事情。
首先进入App的run方法,它首先运行baseInit(),它里面有:
1
2
$cacheInitOptions = is_array($options) && array_key_exists('cache', $options) ? $options['cache'] : array(); //空
$this->_initCache($cacheInitOptions);
注意,这里的$cacheInitOptions是空的。然后调用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
protected function _initCache(array $cacheInitOptions = array())
{
$this->_isCacheLocked = true;
$options = $this->_config->getNode('global/cache');
if ($options) {
$options = $options->asArray();
} else {
$options = array();
}
$options = array_merge($options, $cacheInitOptions);
$this->_cache = Mage::getModel('core/cache', $options);
$this->_isCacheLocked = false;
return $this;
}(责任编辑:最模板)