用户名 密码 记住我 还未注册?

针对2.2.x直接读取模板的文件的提速方法 [技术论坛 - XOOPS使用]

XOOPS China 讨论区 > XOOPS Core (核心) > XOOPS使用 > 针对2.2.x直接读取模板的文件的提速方法

正在浏览:   1 名游客



 到底部   前一个主题   下一个主题  [无发表权] 请登录或者注册

(1) 2 »


针对2.2.x直接读取模板的文件的提速方法
网站管理员
注册日期:
2005/2/24 15:17
所属群组:
网站管理员
注册会员
技术文档组
帖子: 723 | 精华: 32
等级: 24; EXP: 37
HP: 0 / 584
MP: 241 / 9807
离线
针对2.2.x直接读取模板的文件的提速方法

引用:

现有的2.2.x模板缺点:
1.读取于数据库,增加了查询需要
2.每次更新模板都需要更新模块

现在这个hack改善上述两大缺点
1.减少读取数据库需要。
2.修改模块不需要更新模块


如果你没有hack过block.php文件和footer.php文件
可以直接用压缩包的文件来代替,最好之前的两个文件都备份

引用:

具体方法1:
1.复制block.php文件到kernel/,替代原来的block.php
2.复制footer.php替代跟目录下的footer.php


具体方法2:
如果你对这两个文件做了改动,则直接修改文件
1.block.php (此步可以使得区块直接读取于文件,不过可能模板命名不符合规则,就会出错,如article模块则需要定制,看代码)
引用:

找到此行 $btpl = $block_arr[$i]->block->getVar('template') != '' ? $block_arr[$i]->block->getVar('template') : "system_block_dummy.html";

增加下面的代码
引用:

// nightcat 2006-12-14
$btplArr = explode("_",$btpl);
if(ereg("art",$btplArr[0])){$btplArr[0] = "article";}
if(ereg("wp",$btplArr[0])){$btplArr[0] = "wordpress";}
$tplPath = "file:".XOOPS_ROOT_PATH."/modules/".$btplArr[0]."/templates/".$btplArr[1]."s/$btpl";


下面三行
引用:

if (empty($bcachetime) || !$xoopsTpl->is_cached('db:'.$btpl, 'blk_'.$instanceid)) {

$bcontent = $xoopsTpl->fetch( 'db:'.$btpl,, "blk_$instanceid" );

$bcontent = $xoopsTpl->fetch('db:'.$btpl,, "blk_$instanceid" );

替代为
引用:

if (empty($bcachetime) || !$xoopsTpl->is_cached($tplPath, 'blk_'.$instanceid)) {

$bcontent = $xoopsTpl->fetch( $tplPath, "blk_$instanceid" );

$bcontent = $xoopsTpl->fetch($tplPath, "blk_$instanceid" );


2.footer.php(此步骤使得模块模板读取于文件,不过要设置$xoopsOption['template_main']这个变量才读取)
找到下面的代码注释掉
引用:

// if($xoopsConfig[''])
// if (!isset($xoopsOption['template_main'])) {
// $template = null;
// } else {
// $template = 'db:'.$xoopsOption['template_main'];
// }
//

增加如下代码
引用:

// nightcat 2006-12-13
if(!isset($xoopsOption['template_main'])){
$template = null;
} else {
// 判断模块模板路径
$dirname = $xoopsModule->getVar('dirname');
$template = 'file:'.XOOPS_ROOT_PATH."/modules/".$dirname."/templates/".$xoopsOption['template_main'];
}

附件:


zip gofaster.zip 大小: 6.27 KB; 下载次数: 305

2006/12/14 12:42
_________________
nightcat 小站
不同时刻的访问,有不同的惊喜 小站已经改版,欢迎有事没事来踩踩,内容丰富不少,希望你有喜欢的,

Gtalk:[email protected]
MSN:[email protected]
QQ:1043931
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
Support Team
注册日期:
2005/4/30 13:09
来自 安徽安庆
所属群组:
网站管理员
帖子: 513 | 精华: 3
等级: 20; EXP: 90
HP: 0 / 497
MP: 171 / 8097
离线
xoops设计的时候将模板放在数据库里,应该有她的考虑;一个频道页可以有几十个区块组成,设成不同cache提速;但一个内容页(如论坛帖子页)如果cache时间长不利于及时更新,又限制于<{$xoops_contents}>很难进行分拆了,如果能将<{$xoops_contents}>再分拆成小块,分别设成不同时间段cache,既能及时更新,又能提高速度

2006/12/14 13:28
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
版主
注册日期:
2004/7/13 3:29
所属群组:
注册会员
风格美化组
帖子: 1029 | 精华: 3
等级: 28; EXP: 33
HP: 0 / 683
MP: 343 / 12711
离线
如果再把xoops_contents 分拆 cache, 那系统的配置也会复杂很多, 在效率、灵活性、可用性上总归要有折中的

2006/12/14 14:45
_________________
theme.xoops.org.cn诚邀大家共建~
———————————————————
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
网站管理员
注册日期:
2005/2/24 15:17
所属群组:
网站管理员
注册会员
技术文档组
帖子: 723 | 精华: 32
等级: 24; EXP: 37
HP: 0 / 584
MP: 241 / 9807
离线
利用数据库来保存模板,本身就会降低了运行的速度
读文件方式无论如何都比读取数据库的速度快,如果再加上缓存,也比读数据库的方式要好。

这个优化比较针对开发者,修改内容页模板和区块的模板,不需要更新模块了。这个或者是我偏好,特别不喜欢更新模块。

内容页拆分cache就比较麻烦。

2006/12/14 15:46
_________________
nightcat 小站
不同时刻的访问,有不同的惊喜 小站已经改版,欢迎有事没事来踩踩,内容丰富不少,希望你有喜欢的,

Gtalk:[email protected]
MSN:[email protected]
QQ:1043931
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
Support Team
注册日期:
2005/4/30 13:09
来自 安徽安庆
所属群组:
网站管理员
帖子: 513 | 精华: 3
等级: 20; EXP: 90
HP: 0 / 497
MP: 171 / 8097
离线
直接从文件中读模板确实是一种好方法.

我所提到的问题由于最近在内容页进行部分功能拓展.例如我现在要在xoops论坛增加绿野原先论坛里活动报名等功能.因为区块与当前内容页很难作到对应,所以在内容页里用到区块不多,除了登陆的区块,估计就剩下<{$xoops_contents}>.在频道页展示相关内容时我可以用几十个区块设置不同cache保证速度.

而在内容页实际上我有可能只用一个区块加<{$xoops_contents}>,由于每个页面都要查区块,而通常查这些查询消耗都挺大的,再加上对<{$xoops_contents}>为了保证及时性,基本上不做cache或者时间教短,请问大家对newbb是如何设置cache的?

2006/12/14 16:07
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
资深会员
注册日期:
2005/11/16 20:17
所属群组:
注册会员
帖子: 201
等级: 13; EXP: 21
HP: 0 / 305
MP: 67 / 4479
离线
的确是提高速度的一种不错的想法 ,回去我在2.0x下测试一下。。
不过我还是喜欢那种标签调用的方式,感觉方便速度也有保证。

2006/12/14 17:36
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
版主
注册日期:
2004/7/13 3:29
所属群组:
注册会员
风格美化组
帖子: 1029 | 精华: 3
等级: 28; EXP: 33
HP: 0 / 683
MP: 343 / 12711
离线
论坛内容是很难cache

2006/12/14 21:52
_________________
theme.xoops.org.cn诚邀大家共建~
———————————————————
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
网站管理员
注册日期:
2005/2/24 15:17
所属群组:
网站管理员
注册会员
技术文档组
帖子: 723 | 精华: 32
等级: 24; EXP: 37
HP: 0 / 584
MP: 241 / 9807
离线
对newbb帖子做cache的话,我的想法是

1.如果帖子没有更新则调用用缓存的,如果有更新就生成缓存再调用

2.如何保证有更新,最好是增加一个标记字段,如果有更新,就标记为1,生成缓存后就更改0.

3.这里又涉及那些才是更新了?比如,回帖,编辑,删除某贴等时候就标记为1.这时候就需要再次生成缓存了。

在某个意义上来说缓存也相当于生成静态页面了.

2006/12/15 0:26
_________________
nightcat 小站
不同时刻的访问,有不同的惊喜 小站已经改版,欢迎有事没事来踩踩,内容丰富不少,希望你有喜欢的,

Gtalk:[email protected]
MSN:[email protected]
QQ:1043931
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
网站管理员
注册日期:
2004/6/25 19:16
所属群组:
网站管理员
注册会员
Dev+Hack
帖子: 5950 | 精华: 10
等级: 54; EXP: 77
HP: 806 / 1344
MP: 1983 / 25188
离线
在CBB的viewtopic.php里有直接读取模板文件的处理

if($xoopsTpl->xoops_canUpdateFromFile() && is_dir(XOOPS_THEME_PATH."/".$xoopsConfig['theme_set']."/templates/".$xoopsModule->getVar("dirname""n"))){
    
$xoopsTpl->assign('newbb_template_path'XOOPS_THEME_PATH."/".$xoopsConfig['theme_set']."/templates/".$xoopsModule->getVar("dirname""n"));
}else{
    
$xoopsTpl->assign('newbb_template_path'XOOPS_ROOT_PATH."/modules/".$xoopsModule->getVar("dirname""n")."/templates");
}


不过目前还没有从结构上解决,类似的方案应该算是 "hack",不是"正道"
另一个考虑:数据库查询对速度有一定影响,但查询次数不是唯一的决定因素,有时候甚至可以牺牲查询次数换取performance
所以,在CBB中只有这一处采用了直接读取文件的处理


这是一个很不错的考虑点。SMARTY的应用和block机制是影响XOOPS速度的最大因素,这并不是说SMARTY本身不好,而是我们对SMARTY的应用太教条,需要改进。
我们需要找到解决BLOCK易用性和SMARTY各级缓存的方案,如果有必要,甚至可以抛弃现有的BLOCK机制。

2006/12/15 1:43
_________________
XOOPS Project -- |自由|开源|共享|
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


回复: 针对2.2.x直接读取模板的文件的提速方法
Support Team
注册日期:
2005/4/30 13:09
来自 安徽安庆
所属群组:
网站管理员
帖子: 513 | 精华: 3
等级: 20; EXP: 90
HP: 0 / 497
MP: 171 / 8097
离线
感觉block机制确实与内容这块很难很好的结合起来.绿野用的是2.26,论坛也用的是当时自带cbb3.04,打开每个页面必然会进行
SELECT * FROM XXX_group_permission WHERE (gperm_modid = '1' AND gperm_name = 'block_read' AND gperm_groupid = '3')
( 0.005162)
SELECT DISTINCT i.instanceid, b.*, i.* FROM XXX_block_instance i, XXX_newblocks b, XXX_block_module_link m WHERE m.block_id=i.instanceid AND i.instanceid IN (xxx,xxx,xxx......) AND i.visible=1 AND i.bid=b.bid AND b.isactive=1 AND ( (m.module_id=0 AND m.pageid=0) OR (m.module_id=mm AND m.pageid IN (0,0)) ) ORDER BY i.weight,i.instanceid
( 0.126147)
虽然查看某个帖子只有一个区块,但是此两个查询是必做的.
下一步,我想先在cbb后台设置里增加程序模仿权限设置,将cbb所有的区块缓存在数组里存放在cache中,newbb跳过block机制,直接在文件里写入block id,通过cache里block数组,调用block相关信息;这样做的风险主要做变更对应blcok时,block id也要对应更新.

关于newbb cache的话,由于现在在论坛上增加了活动功能,不仅要考虑板主,管理员,帖子作者,不同群组权限,还要考虑领队,队员,活动状态等一系列问题,通过字段判断是否cache难度较大.我的做法是引入2.06的群组cache机制,针对讨论区管理员,板主在getCachedTemplateId()时给予对应标志,针对作者,领队,队员,加上uid +对应标志生成对应cache,在修改,删除清除对应cache,但是却无法清除所有对应cache,比如我现在是以作者身份更改帖子保存之后,可以清除对应作者的cache,但却无法清除管理员,游客,一般会员对应的cache,他们要看到效果,需要等到cache时间完成;所以建议加上一套完全的 cache机制,与权限结合起来,从核心延伸至模块,让缓存真正用起来,如果加了缓存机制必然会造成cache文件较多,现在绿野光文章每天可以产生几千cache文件,是否还需要加上模组cache管理,可以只清除对应模组cache,是否加上定时清除cache?

关于<{$xoops_contents}>cache,通过绿野newbb开发cache测试(本机) 可以将原先30多个查询,1秒多的速度,cache成10几个查询0.4秒左右,剩下已经不能精简.现在xoops在SMARTY的应用,似乎仅限于传值,几乎没有定义函数到smarty中,lifetype在smarty中模板应用了很多函数,只是没有时间去研究.
另绿野论坛功能扩展应该算完成了,下周准备放在网上测试,希望大家多多拍砖和帮忙了.

2006/12/15 6:40
工具箱 短消息 Email PDF 书签 打印 举报 回顶部


(1) 2 »

  [无发表权] 请登录或者注册


不可查看帖子。
不可发帖。
不可回复。
不可编辑自己的帖子。
不可删除自己的帖子。
不可发起投票调查。
不可在投票调查中投票。
不可上传附件。
不可不经审核直接发帖。
不可使用主题类别。
不可使用HTML语法。
不可使用签名档。

[高级搜索]