xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
Support Team
![]()
注册日期:
2005/4/30 13:09 来自 安徽安庆
所属群组:
网站管理员 等级: 20; EXP: 84
HP: 0 / 496 MP: 170 / 7610 ![]() |
1. xoops可以设置缓存,在系统设置里面可以设置不同的模块,不同的缓存时间。比如设置article模块,缓存1小时,在访问http://www.example.com/modules/article/index.php 在没有缓存文件存在的情况下,运行产生缓存文件,在后面1小时内,访问此页面直接调用缓存文件,提高访问速度。但是,这会产生几个问题。
一,部分内容不能缓存,例如article的点击数,通过XoopsFormHiddenToken产生的xoops内部认证码,需要后期加载的验证码,都不能被缓存。前面我已经说过可以通过 $xoopsTpl ->register_function("count","article_count",false);通过article_count($params, $smarty),对页面展示点击数内容进行不缓存。但有些问题,此法在xoops2.26可以使用,在xoops2.016用起来可能会有些麻烦。为什么 会这样呢?首先我想以我的方式来解释下xoops页面结构。举个例子,article的view.article.php xoops2.26的smarty加载是在include "header.php",在根目录/include/common.php里加载完成,而xoos2.016是在include XOOPS_ROOT_PATH . "/header.php";加载完成。 $xoopsTpl ->register_function("count","article_count",false)这段代码必须在include XOOPS_ROOT_PATH . "/header.php"的checkcache之前定义。因为之后定义,如果内容已经缓存smarty将编译不了<{count}>。通常xoops2.26我可以在include "header.php" 和include XOOPS_ROOT_PATH . "/header.php"; 之间定义$xoopsTpl ->register_function("count","article_count",false),但在xoops2.016我找不到在哪定义比较好。 二.当内容重新编辑或者有人发表评论需要及时显示的时候与缓存之间的矛盾。这个问题就是涉及到brent在繁体中文的一个问题。首先要弄清楚cacheid的产生,请看 class/theme.php中的259行 $this->contentCacheId = $this->_generateCacheId($dirname, str_replace( XOOPS_URL, '', $_SERVER['REQUEST_URI'] )); contentCacheId是与$_SERVER['REQUEST_URI']有密切关系的,所以$_SERVER['REQUEST_URI']必须要规范。例如我们看下 view.article.php中86-100行代码 举个例子:http://www.example.com/modules/article/view.article.php/c1/1 经过上述代码以后会$_SERVER['REQUEST_URI']=/modules/article/view.article.php?article=1&category=1 这就是我们所需要的。比如我们编辑这篇文章,提交都会通过action.article.php,在保存之后,添加如 D.J在action.article.php 的处理是 我认为mod_clearSmartyCache是将文件目录文件名遍历一遍,当文件过多时,很明显会减慢速度。 2.xoops静态化方案。受文明猪的思路所影响,我的方案是继承于他的思路,所以此方案的版权归他。 当然,重申一句,我没有看见他的相关代码,只看过他演示的实例。 此方案的前提是在后台启用cookie 存储xoops的session,并修改区块登陆模块,增加id="checklogin"。 1.增加xoopscache到class目录 xoopscache主要完成读,写html静态内容. 2.增加cachedata.php到include目录 cachedata主要是静态文件的配置。 xoopscache内容 我主要是在getByUrl里面判断是否静态化。 3.在include/common.php修改代码 在xoops =& new xos_kernel_Xoops2();后面添加 4.添加include/buildindex.php 可以看到buildindex.php 主要是用来反写checklogin里面内容,比如已经登陆的话,反写已经登陆的信息,具体内容请自行添加。 5.更改class/theme.php 将285行将 global $xoops, $xoopsLogger;改为 global $xoops, $xoopsLogger,$xoopscache; 在 if ( $this->bufferOutput ) { $this->content .= ob_get_contents(); ob_end_clean(); } 后面添加 在$this->template->display( $this->path . '/' . $this->canvasTemplate );前面 添加 ok,静态化基本完成,大家可以试下了。 应用实例http://www.lvye.info/modules/blog/ 绿野文章等。
2007/8/19 18:26
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
初级会员
![]()
注册日期:
2007/2/21 23:56 所属群组:
注册会员 等级: 4; EXP: 85
HP: 0 / 96 MP: 12 / 967 ![]() |
有没有人测试一下
我弄了以后还是差不多,可能我的CPU太老了
2007/8/21 18:34
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
高级会员
![]()
注册日期:
2004/12/22 15:03 所属群组:
注册会员
帖子:
145
等级: 11; EXP: 9
HP: 0 / 252 MP: 48 / 4129 ![]() |
謝謝agl提供這樣好的文章,我想問一下如果我照改了以上的方式是對整個系統都會加快嗎??
還是祇是對 模組 article有用 第二問題是更改之後在後台設置緩存還有用嗎?
2007/8/25 8:49
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
Support Team
![]()
注册日期:
2005/4/30 13:09 来自 安徽安庆
所属群组:
网站管理员 等级: 20; EXP: 84
HP: 0 / 496 MP: 170 / 7610 ![]() |
静态化页面由此配置指定,主要是针对频道页静态化,如果要对比较多的页面静态化其实也可以.但是有些问题需要清楚,比如静态化后,部分内容又须动态(例如登陆前后,点击数等),这些如何去处理,需要去认识清楚.所以,修改的话须要对xoops架构有比较深的认识,或者只是在本地测试学习用.如果成功的话,会在根目录产生html/文件夹,静态文件在此里面.我举的这个现在只针对频道页,因为文章内容涉及到权限,点击评论等,没有教好的通用性.因为静态化会避免加载很多东西,对性能会有所提高.绿野在静态化之前会出现服务器压力过大而需重起机器,但对几个频道和article文章(只针对游客)做了静态化后,这种情况有较好的缓解,而且还不包括对压力最大的论坛进行静态化处理. 在静态化页面指定时间内,被静态化的页面缓存不起作用.缓存与静态化区别,是缓存只针对页面部分内容进行处理,所以必须要加载xoops系统变量,如smarty等.静态化是对整个页面处理,因为要考虑部分内容动态,需要加载使部分动态内容所需的系统变量.
2007/8/25 17:22
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
高级会员
![]()
注册日期:
2004/12/22 15:03 所属群组:
注册会员
帖子:
145
等级: 11; EXP: 9
HP: 0 / 252 MP: 48 / 4129 ![]() |
如果單純的以加載了系統的負荷來加快其頁面的速度,我想我會很樂意的接受,因為現在四核心已經出世,加上內存可以至8G ,我自己都是以自己的機器架站,但是一直無法解決的問題是>>速度 ,頻寬方面我上傳可以到 200k / sec ( 1M =1024k)
我在台灣覺得您的網站速度很快 ,我想應該有對模組 article 作優化 ,大致上我覺得自己的hack可能很有用,但我們倆的模組不同,加上我的模組有osc正在進行,這個可能對我不適用 不過還是謝謝您的寶貴的文章,因為給一般用戶使用也真的不容易.. ^^
2007/8/27 9:25
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
初级会员
![]()
注册日期:
2007/2/21 23:56 所属群组:
注册会员 等级: 4; EXP: 85
HP: 0 / 96 MP: 12 / 967 ![]() |
引用:
修改区块登陆模块,增加id="checklogin"。 这个在哪里修改,我不太清楚,麻烦给讲解一下
2007/9/9 11:06
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
Support Team
![]()
注册日期:
2005/4/30 13:09 来自 安徽安庆
所属群组:
网站管理员 等级: 20; EXP: 84
HP: 0 / 496 MP: 170 / 7610 ![]() |
我将system_block_login.html改成这样, 多加了checklogin; 再在include/buildindex.php 通过document.getElementById("checklogin").innerHTML 将登陆用户反写.
2007/9/9 11:57
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
初级会员
![]()
注册日期:
2007/2/21 23:56 所属群组:
注册会员 等级: 4; EXP: 85
HP: 0 / 96 MP: 12 / 967 ![]() |
弱弱问一下,rebuild.php这个文件在哪里?
我按找你的方做了 html文件夹还是没有文件
2007/9/10 8:11
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
Support Team
![]()
注册日期:
2005/4/30 13:09 来自 安徽安庆
所属群组:
网站管理员 等级: 20; EXP: 84
HP: 0 / 496 MP: 170 / 7610 ![]() |
引用:
4.添加include/buildindex.php 引用: 2.增加cachedata.php到include目录 这些文件都是必不可少的. 另外请检测下是否有html目录,且可写
2007/9/10 8:38
|
|||
|
||||
回复: xoops缓存分析及静态化方案 |
||||
|---|---|---|---|---|
|
初级会员
![]()
注册日期:
2007/2/21 23:56 所属群组:
注册会员 等级: 4; EXP: 85
HP: 0 / 96 MP: 12 / 967 ![]() |
除了rebuild.php这个文件我没有找到,没有做修改外,其他的都按照你说的要求去做了,文件夹目录是可写的
网站地址在这里,我在自己的机器上测试,可能有点慢 http://www.dxx.com.cn/ 您能不能加我QQ5130989
2007/9/10 10:46
|
|||
|
||||