php网站的全局配置文件,Magento缓存与全局配置文件缓存

使用如下例子:

1 先关闭缓存

然后在任何一个控制器中添加一个方法加入如下代码:

1

2

$xml = Mage::getConfig()->getNode()->asXml();

file_put_contents('D:/config_file.xml', $xml);

在我这里,产生的文件大小为684K。这是一个非常让我吃惊的数字。如果每个请求都重复这个过程,如果100个同时请求,将吃掉68400K=68.4M内存,注意,这只是针对全局配置, 还没有包含布局系统等。

2 开启缓存

多次刷新刚才那个方法,发现产生的文件只有220K。

问题:为何会如此?比对先后两次产生的文件代码:

c428d189eb9d84e8587ead95339878e7.png

从缓存中获取的文件,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;

}(责任编辑:最模板)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值