关于优化cms静态页面生成速度的简单想法

[ At 11/6/2008 By wukong   4 comments ]

前期做过几个站,都使用了自己写的类似kc的程序,.net开发,对于标签解释参照了一些kc的东西,但大部分机制都自己重写了,本想能够灵活的在伪静态和静态之间转换,由于购买服务器空间限制,现在只能放弃伪静态,改用静态了。近期临时写了一段代码,调用我的标签解释引擎生成静态html文件,但是从实际效果来看,速度不太理想,跟原版asp开发的kingcms相比,虽有提升,但是差距不大。

在kc用户群中,也有一大部分站长朋友抱怨kc生成速度慢。都在等待kc.php出世,想着php版能解决目前的一些问题,特别是速度问题。呵呵,俺不喜欢php,虽然也开发过一些php程序,不过俺还是喜欢微软的东西,哈哈哈。

跟朋友沟通中,了解到其他一些优秀的cms,比如dede,生成速度据说很快的,难道真的是php的优势?我认为不然,我感觉肯定人家的代码在架构上做了什么特殊处理,优化了生成速度。没时间研究他们的代码了,只有自己设计自己的优化方法。这两天尽考虑这问题了。

生成静态html文件速度慢,究其原因,无非有几点影响速度。数据库读写查询速度、标签代码分析解释、文件内容写入。

对于数据库读写速度,目前优化空间不太大了,原有代码已经特别注意了查询语句的优化。当然,如果用mssql替换access的话,速度也会有一定提高,但是购买的主机一般mssql不太好用,有诸多限制,暂可以不考虑这个问题。还有一点就是考虑使用数据库连接池机制,就是改变目前读写一次数据库就发起一个新的数据库链接,并及时关闭,这种操作方法也是微软提倡的,说是节省服务器资源,减少死锁什么的。但是我考虑是不是可以发起链接后在所有需要的查询都操作完毕,再关闭链接呢,这样是不是能节省掉很多链接数据库的时间呢,进一步,是不是可以在cms开始生成页面前,就发起n个数据库链接,供后面需要的地方使用呢?顺手写了个数据库连接池测试代码,经过测试发现,数据库使用长连接,并不能提高多少速度,效果不太明显,可能的确如微软所说,数据库链接在断开后实际上服务器并不真正断开而是缓存了,下个链接直接就可以使用缓存打开了,放弃这个想法......

标签代码分析解释优化,我的代码中,对模板文件中的标签提取,标签解释,使用了大量的正则表达式进行处理,大大提高了代码分析的灵活性。当然,正则表达式运行效率可以通过优化正则表达式代码提高,不过目前暂时不考虑这个问题吧,感觉这个影响还不太大,还不是目前影响我的生成静态页面速度的主要因素。

最后就是文件内容写入了,昨天朋友ash提到,说dede的速度快,应该是因为php在文件处理上有一定优势。呵呵,这个我就不发表意见了。不过我认为开发语言对于文件读写速度差别不太大,毕竟大家都是调用了操作系统提供的api进行处理的。

说了这么多,究竟怎么优化呢,从哪儿着手呢。。。。。。。

就从数据库读写和标签代码分析综合处理这块儿着手进行优化吧,静态文件的生成,首先要读取模板文件,然后分析模板中使用了哪些调用标签,然后解释标签并用处理后的html代码替换掉标签,当然,标签解释时会需要大量的数据库操作。在此过程中,由于模板上很多标签都是雷同或者相同,解释后的内容也是相同的。比如:可能栏目页面每页都会有相同的推荐文章标签调用块。目前是每生成一个栏目页面,就读取一次推荐文章填充该标签。那么可优化的地方就在这里了,能不能建立一个大的缓存,只在第一次遇到一个推荐文章调用块的时候,读取数据库生成该标签所需的html代码,然后生成后面的列表页的时候,如果遇到相同的推荐文章调用,就不用读写数据库解释代码了,直接拿缓存里的html代码块替换该标签就可以了,这样即节省了数据库读写,又省掉了标签的逻辑判断处理。一个页面省掉一些,如果10000个页面呢,会节省很多东东的操作的。同样,一个页面上会有很多相同的标签的,比如每个页面都会有一个相同的广告位,等等。。。

但是还要考虑的就是这些缓存内容如何判断是否跟目前标签相同、缓存内容放到哪儿(写文件还是放内存)、缓存内容生命周期多久(什么时候释放缓存呢)。

闲话就此打住,干活去,实践中去求证这些东西是否真的能提高静态页面生成速度。

« SQL注入提权简单方法交警大哥没罚我,哈哈! »
  • 相关文章:
  • 1.xpnew
  • 无意当中踏进来了脚,我是最近换了工作,这家单位就是用cms做网站,所以我才接触Cms的,但是我入手工作之后发现这套CMS系统诸我不便,也萌生了自己开发一套开源的cms的想法。因为我是微软的拥趸,所以如果要做的话,也是在.net平台上的。
    当前这个想法还没有成熟,但是已经把标签系统做出来了。很希望能和你交流一下,期待你的邮件!
    xpnew#126.com
  • 8/10/2010 2:06:36 PM 回复该留言
  • 2.xpnew
  • 有没有办法在微软强大的.net平台上实现静态、动态结合呢?
    比如说新闻的标题、内容永久性的静态,但是“相关新闻”等模块可以是半动态,或者是动态的,我知道调用js是一种办法,但是js不利于SEO。
    也许可以有一种更好的办法。
  • 8/10/2010 2:31:52 PM 回复该留言
  • 3.wukong
  • 欢迎光临~~
    站点底部有鄙人联系方式,欢迎探讨,来电来函请注明来意。
  • 8/17/2010 9:50:20 AM 回复该留言
  • 4.免费域名
  • 我半夜三更找能生成静态的简单cms啊,怎么就找到这里来了
    由 wukong 于 9/8/2010 10:07:59 PM 最后编辑
  • 9/4/2010 10:34:41 PM 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By 空空如也 

Copyright 167-2009 www.7es.cn . Some Rights Reserved. Email:iamwgh@msn.com QQ:49556
Friends site:Null