最模板 - 外贸网站建设,外贸网站模板

最模板

当前位置: 首页 > Magento > Magento教程 >

Magento缓存与全局配置文件缓存(5)

时间:2014-06-02 07:38来源:未知 作者:最模板zuimoban 点击:
request_processors是在配置文件的cache中指定的: 1 2 3 4 5 global cache request_processors/request_processors /cache /global 如果指定了,那么就使用它处理响应。这个处理器

request_processors是在配置文件的cache中指定的:

1
2
3
4
5
    <global>
        <cache>
    <request_processors></request_processors>
</cache>
</global>

如果指定了,那么就使用它处理响应。这个处理器至少有extractContent方法,看起来应该是和全页缓存相关。我试图去搜索extractContent,没有找到这个方法,结论是,Magento CE还没有提供全页缓存,这个也是这种插件热卖的原因了。

如果进入System->Configuration->ADVANCED->System,你将看到:
Magento后台设置全页缓存
这个配置和我这里说的全页缓存不是一个概念。这里的zend_page_cache是Zend Server提供的一个扩展,具体怎么搞就没有研究了。
Zend_Page_Cahce配置
这个探讨先到这里。我们继续回到App的_initModules()方法中:

1
2
3
4
5
6
7
8
9
10
protected function _initModules()
{
    if (!$this->_config->loadModulesCache()) {
        $this->_config->loadModules();
 
        $this->_config->loadDb();
        $this->_config->saveCache();
    }
    return $this;
}

这里的saveCache()方法是首次开始缓存。既然如此,那么继续:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public function saveCache($tags=array())
{
    if (!Mage::app()->useCache('config')) {
        return $this;
    }
//为缓存打标签
    if (!in_array(self::CACHE_TAG, $tags)) {
        $tags[] = self::CACHE_TAG;
    }
    $cacheLockId = $this->_getCacheLockId();
//这是上锁保护 如果缓存正在进行,那么就被取消
    if ($this->_loadCache($cacheLockId)) {
        return $this;
    }
// … 省略
}

这里首先使用App的useCache方法检查是否启用了缓存:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//Mage_Core_Model_App
    public function useCache($type=null)
    {
        return $this->_cache->canUse($type);
}
//Mage_Core_Model_Cache
    public function canUse($typeCode)
{
    // _allowedCacheOptions为空
        if (is_null($this->_allowedCacheOptions)) {
            $this->_initOptions();
        }
 
        if (empty($typeCode)) {
            return $this->_allowedCacheOptions;
        } else {
            if (isset($this->_allowedCacheOptions[$typeCode])) {
                return (bool)$this->_allowedCacheOptions[$typeCode];
            } else {
                return false;
            }
        }
}
 
    protected function _initOptions()
{
    // OPTIONS_CACHE_ID->core_cache_options 这里首先从缓存中获取这个值
        $options = $this->load(self::OPTIONS_CACHE_ID);
        if ($options === false) { //没有获取值
        //从数据库获取值
            $options = $this->_getResource()->getAllOptions();
            if (is_array($options)) {
                $this->_allowedCacheOptions = $options;
            //把值缓存起来
                $this->save(serialize($this->_allowedCacheOptions), self::OPTIONS_CACHE_ID);
            } else {
                $this->_allowedCacheOptions = array();
            }
        } else {
        //取到了值
            $this->_allowedCacheOptions = unserialize($options);
        }
 
        if (Mage::getConfig()->getOptions()->getData('global_ban_use_cache')) {
            foreach ($this->_allowedCacheOptions as $key => $val) {
                $this->_allowedCacheOptions[$key] = false;
            }
        }
 
        return $this;
    }
(责任编辑:最模板)
------分隔线----------------------------
栏目列表
推荐内容