西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > magento教程 >

Magento缓存与全局配置文件缓存

时间:2016-04-07 08:44来源: 作者: 点击:
使用如下例子: 1 先关闭缓存 然后在任何一个控制器中添加一个方法加入如下代码: 1 2 $xml = Mage::getConfig()-getNode()-asXml(); file_put_contents(D:/config_file.xml, $xml); 在我这里,产生的文件大小为

使用如下例子:
1 先关闭缓存
然后在任何一个控制器中添加一个方法加入如下代码:

1
2
$xml = Mage::getConfig()->getNode()->asXml();
file_put_contents('D:/config_file.xml', $xml);

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

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

问题:为何会如此?比对先后两次产生的文件代码:
Magento全局配置文件结构

从缓存中获取的文件,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;
}
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容