登录发现更多内容
首页
分类
目录
索引
标签
酷站
用户名
Email
自动登录
找回密码
密码
登录
成为会员
只需一步, 快速开始
登录
立即登录
立即注册
其他登录
QQ
微信
新首页
Portal
观海听潮
小百科
创业沙龙
关于我们
酷站
科技资讯
搜索
搜索
本版
帖子
用户
活动
好友
帖子
收藏
道具
勋章
任务
动态
记录
门户
导读
排行榜
设置
我的收藏
退出
首页
›
快活林
›
猿氏悟语
›
Discuz! 的主动缓存和被动缓存
0赞
赞赏
手机版
扫码打开手机版
把文字装进口袋
返回列表
Discuz! 的主动缓存和被动缓存
[ 复制链接 ]
冰客
2009-5-29 01:59:15
Discuz!的缓存同样分了主动缓存和被动缓存。从功能上来说,主动缓存一般用到管理员对全站的设置,等等需要手动更新的地方,这些地方的数据都有一个特点,那就是它们的更新可能性很小,平时不需要自动更新;Discuz!的被动缓存,一般分布在诸如帖子内容显示,用户信息更新这些地方,这些地方的更新基本上都是因为用户使用了某一特定的功能时所激发的。
在正常运行的Discuz!系统文件夹里面会有一个forumdata文件夹,这个是论坛记录和缓存文件的存放目录,一般这些文件都是自动生成的,在 forumdata/cache/里面存储的都是一些Discuz!的基本设置和一些常使用的值,这些值一般在系统初始化的时候就保存在$_DCACHE 全局变量中,在后面的操作中将可以简单地使用它们进行功能上的判断。
(1)主动缓存,也就是只在用户操作后台时,由Discuz!系统去删除原有缓存进行更新的缓存。它们普遍存在于forumdata/cache/目录中,比如说/forumdata/cache/cache_settings.php保存了整个系统的核心设置,一般情况是不会更新的,只有后台修改了比如站点名称等关键信息的时候才会去主动更新这个缓存文件。还有用于保存用户组和管理员组相关信息的两类缓存文件:
/forumdata/cache/usergroup_’.intval($groupid).’.php
/forumdata/cache/admingroup_’.intval($adminid).’.php
另外还有在index、forumdisplay、viewthread、post、blog、topicadmin、register、 archiver几个模块中的时候分别会使用的cache_’模块名‘.php的缓存。在include/common.inc.php中的流程可以看到,这些类似的主动缓存都有一个特点:统一进行引用(include),最后进行失败检测,最后再对失败的缓存(比如说文件丢失或者是上次更新还没生成这样的情况下)统一进行重新生成的操作,具体的生成方法见/include/cache.func.php中的updatecache函数。
(2)被动缓存,也就是缓存的生成并非是由用户手动更新的,而是在系统里判断是否需要生成缓存,需要缓存多长时间,由系统自身来完成整个过程。很典型的代表有帖子内容的缓存生成过程。帖子内容的缓存路径被cache_setting.php里定义为一个可以由用户修改的值,默认是在 forumdata/threadcaches下,由viewthread.php里的逻辑可以看到,当满足使用缓存条件的时候(一般情况是第一页的内容),系统会执行viewthread_loadcache函数,此函数会判断缓存是否过期,如果不过期就执行函数中间读取缓存的操作,最后 Discuz!直接巧妙地在函数中die出一段javaScript,结束访问。专研Discuz!代码的你可能会很疑惑,究竟是什么时候生成的缓存呢?include文件夹里有一个global.func.php,这个文件包括了整个Discuz!系统使用到的全局方法,其中有一个叫output的函数,在函数里判断了是否可以缓存当前的页面,并且使用ob_get_contents函数直接缓存页面。
提示:ob_start()在服务器打开一个缓冲区来保存所有的输出。所以在任何时候使用echo ,输出都将被加入缓冲区中,直到程序运行结束或者使用ob_flush()来结束。然后在服务器中缓冲区的内容才会发送到浏览器,由浏览器来解析显示。函数ob_end_clean 会清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。此时得用一个函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。这样的话,能将在执行ob_end_clean()前把内容保存到一个变量中,然后在ob_end_clean()后面对这个变量做操作。
discuz
相关帖子
discuz的dreamhost的rewrite设置方法
修改论坛横版样式(包括板块图标、板块简介、显示子版和版主)
discuz6.1编辑器默认为简单功能的设置方法!
把Google搜索换成自己的
DISCUZ架构:AJAX之ajax.js 函数
瑞星发表声明称09新品遭恶意抹黑
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
点评
本版积分规则
回帖后跳转到最后一页
综合
最新
热度
发表评论
冰客
关注
主题数2009
[急聘][全职/兼职]Linux服务器开发高级工程师-Python方向
阅读 295630
航天金税:小规模金税盘网上抄报说明
阅读 241145
11月26日,华为mate 8在上海正式发布
阅读 206774
发布新话题
小帖士
如果你不是特别对他的每一句话感兴趣,不要随意用"关注"人的功能,因为关注以后,他的所有发帖回帖都会以通知的方式提醒你的!
统计信息
会员数: 4660 个
话题数: 8707 篇
巅峰数: 8 人
首页
分类
目录
索引
我的
返回顶部