前面分析了DZX的执行流程,里面提到,在调用模板前DZ会准备好数据,而模板被编译后就会去取准备好的数据。这篇文件主要分析下,DZ是如果保存准备好的数据的。即数据的缓存。
dzx首先会去数据库里取到所需要的数据,然后调用source\function\function_core.php里的memory方法处理缓存。其中memory方法支持三种缓存的处理方式,get,set,rm,get方式会从缓存里取数据,set方式将数据存入缓存,而rm方式则是删除缓存里的数据。当dzx取到数据时,首先会调用memory方法的set操作,把数据保存在内存里。这个保存过程是怎样的呢?
memory方法里调用了discuz_memory(source\class\class_core.php文件中)类的get set rm方法,而这三个方法接着调用了discuz_memcache类的对应方法,discuz_memcache类又调用了Memcache类的方法,Memcache继承自MemcachePool。我个人觉得DZ最后应该是用到memcached这个开源的缓存系统了,不过不明白的是,Memcache和MemcachePool类的get set等方法均没有实现,只有一个空函数。我的电脑也没装过memcached,还没弄清楚是怎么回事。
保存进缓存后,再取出来就方便了,如:
$ret = memory('get', 'forum_index_page_'.$groupid);
下面再讲一点,对每次请求,DZX怎么知道要准备哪些数据呢?这主要是在上文讲到的几个入口文件里定义的。
对于广场(论坛)模块,就定义在forum.php里。
//这个变量保存了所有论坛模块里要用到的需要初始化的数据
$modcachelist = array(
'index' => array('announcements', 'onlinelist', 'forumlinks', 'advs_index',
'heats', 'historyposts', 'onlinerecord', 'userstats'),
'forumdisplay' => array('smilies', 'announcements_forum', 'globalstick', 'forums',
'icons', 'onlinelist', 'forumstick','threadtable_info', 'threadtableids', 'stamps'),
'viewthread' => array('smilies', 'smileytypes', 'forums', 'usergroups', 'ranks',
'stamps', 'bbcodes', 'smilies', 'custominfo', 'groupicon', 'stamps',
'threadtableids', 'threadtable_info'),
'post' => array('bbcodes_display', 'bbcodes', 'smileycodes', 'smilies', 'smileytypes',
'icons', 'domainwhitelist'),
'space' => array('fields_required', 'fields_optional', 'custominfo'),
'group' => array('grouptype'),
);
//默认mod是index
$mod = !in_array($discuz->var['mod'], $modarray) ? 'index' : $discuz->var['mod'];
define('CURMODULE', $mod != 'redirect' ? $mod : 'viewthread');
$cachelist = array();
if(isset($modcachelist[CURMODULE])) {
//默认这里$cachelist = $modcachelist['index'];
$cachelist = $modcachelist[CURMODULE];
}
if($discuz->var['mod'] == 'group') {
$_G['basescript'] = 'group';
}
//初始化缓存时会完成$modcachelist['index']中所有列出的功能点的数据的初始化
$discuz->cachelist = $cachelist;
$discuz->init();
source\class\class_core.php中的discuz_core的_init_setting方法中有句话:
!empty($this->cachelist) && loadcache($this->cachelist);
这个loadcache就会完成所有$cachelist中列出的需要数据的初始化工作。loadcache最后会调用到source\function\function_core.php的cachedata方法,cachedata会去common_syscache表里取数据。
不过这里取的只是一些系统缓存。还不清楚其它数据是怎么取的。改天继续研究吧。
可能写的有不对的地方,欢迎指正。
分享到:
相关推荐
Discuz X1.5使用手册,自己总结的,希望有用
discuz x1.5 wap 手机接口,拷贝到论坛根目录即可 WAP 2.3比之前的版本更新的细节如下: --贴子界面优化。 --自动读取标题。 --增加置顶贴区别。 --页面直接显示用户。 --修复登录BUG。(要是你登录还有问题,我也...
discuz!x1.5数据表的说明文档,包含所有的表的说明,。定义,等等
Discuz!X1.5论坛系统详解Discuz!X1.5论坛系统详解Discuz!X1.5论坛系统详解
discuz!x1.5数据表discuz!x1.5数据表discuz!x1.5数据表discuz!x1.5数据表discuz!x1.5数据表discuz!x1.5数据表discuz!x1.5数据表discuz!x1.5数据表
discuz x1.5经典版,中国第一SNS源码
Discuz_X1.5,dz1.5论坛
Discuz!X1.5 数据结构说明书.CHM
discuz x 1.5目录结构
按照说明一步一步操作即可成功搭建discuz论坛。 按照说明一步一步操作即可成功搭建discuz论坛。
Discuz! X1.5网址导航插件 ,相关演示请看www.58119.com
Discuz!X1.5门户 模板下载 Discuz!X1.5门户 模板下载 Discuz!X1.5门户 模板下载
discuz x1.5 插件开发 模块开发
Discuz! X1.5的研发改进,以“打造经典”为使命,从提高程序功能效率、优化用户界面和体验、增加站长运营工具等各方面... X1.5 正式版的发布,我们热情邀请站长立即安装,或者升级,一起享用 Discuz! X 带来的全新革新
discuz x1.5数据库结构,描述相对清晰,遗憾的是没有给出值说明
详解Discuz!X1.5 showmessage函数详解Discuz!X1.5 showmessage函数
discuz x 1.5 urf-8 中文
付费浏览帖子(看帖扣分)For Discuz!X2 & X1.5
本文档用于帮助您将原有社区产品升级或者转换到 Discuz! X1.5 正式版本
Discuz_X1.5正式版,无限制。PHP程序。安装简单实用。