贴心
全国7×24小时客服热线
安全
病毒杀除率高于99%
稳定
网站可用性高于99.9%
实力
服务68家上市企业及集团公司
点击数:14232015-07-29 15:57:03 来源: 外贸网站建设,深圳外贸网站建设,深圳网站建设,外贸商城网站制作-亿恩科技
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>
<default></defatul>
<admin></admin>
</store>
|
刚才消失的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;
|