为什么?
凡事需要讲一个动机,搞IT的人都知道,我们现在的程序都是事件驱动的,而重构也是一样的,前段时间我在博客中讲到”你有勇气重构么?”,没想到我很快就出现这样的问题。我把本系列文章取名叫旧城改造,是因为我觉得现在很多网站和旧城改造一样,旧城已经不能满足需要了,但旧城里人口众多,不可能推倒重建。Wordpress只是一个很小的程序,我计划花一个周期的休息时间来改造,但我希望可以通过这次改造抛砖引玉,给大家提供一个参考。
WordPress是一个非常不错的博客程序,最重要的是,它支持各种各样的插件,全世界有成千上万的开发者在开发各有有趣的应用,和Firefox一样,如果没有插件,wordpress什么也不是。
问题就出在这里,因为插件的开发者水平可能也是参差不齐,插件是通过Hook进行的,所以一个页面可能经过大量的Hook,甚至有Bug的存在。访问量少还好一些,当访问量和订阅量大点的时候,就经常出现了超时错误和其它的一些500错误。同时网站速度非常慢,alexa的评分是19分,也就是只有19%的网站比我的网站慢。一方面给用户的体验不好,另一方面对SEO也是很不好的。再者就是我觉得博客的文件链接数太多,像javascript和css不同插件有不同的文件,导致了有很多的文件链接数。我大概总结了一些,现在有以下问题需要改进:
- 网站常常报出500错误,造成用户的流失,同时对搜索引擎也非常不友好
- 速度太慢,分两个方面,一个是程序太慢,另一方面是由于每个插件都有自己的js和css,造成css和js过多,虽然这些文件都不大,但是每次http请求都要消耗时间,造成速度过慢
- 我希望有24小时、昨天、本周、本月、本年的阅读排行,但目标没有找到合适的插件
- 近来可能有采集站在做采集,希望可以对这个进行一些防范
- 觉得用户体验不太好,希望可以加强和用户的互动
目标?
- 响应速度在2000毫秒以内
- 下载速度(用户看到整个页面的内容)不超过10秒
- 基本杜绝500错误,除非服务器出现问题
- 可以支撑三倍于现在的访问量
- Yslow测试可以在b级以上,最好在A级
- 良好的可扩展性,可以添加更多的功能(主要是前端的功能)
分析?
根据现状以及目标进行分析,发现主要问题是在于读数据上,浏览者可能写数据主要是两个地方,一个是留言,另一个是访问量统计,数据的变动性比较少。改造有两种方法,一种是自己写一个博客,另一个是在wordpress上修改。自己写控制起来肯定非常方便,但工作量会太大,而且wordress有很多功能是我需要的,比如说pingback,比如说Google XML Sitemaps的功能等等,这些功能如果要自己写的话,需要花很多的时间。
修改wordpress也有些问题,因为我本身对php不熟悉,并且我认为wordpress这种hook来hook去的,比较浪费资源。尝试过几种静态化插件,但发现都不能满足我的需求。根据前面的分析,速度慢主要是针对用户来说的,而用户主要是在读数据,那么我们可以这样,把读数据端进行改造,而写数据端,也就是后台部分保留。这样即可以利用现有wordpress的功能,又可以实现用户访问速度的提升。
思路
- 首页和文章页生成静态页,在文章被更新、删除、添加的时候触发。也可以使用手动
- 重写前端代码,包括JS/CSS/Html
- 评论及访问量的统计、评论采用Ajax读取,在用户已经下载完数据再数据,以提供响应速度,因为用户并不急着看评论
- 用户访问文章的时候,通过Ajax向服务器提交,服务器将记录用户的访问信息
- RSS必需静态化,因为各RSS阅读器会定期访问服务器,这也会造成服务器的压力
- 适当的时候,可以选择把首页和一些访问量大的页面进行缓存
原则
- 不改变现有的wordpress的任何代码,需要在发布文章的时候添加一个hook,以插件的方式实现,功能很简单
- 不改变现在的url,对用户和搜索引擎透明
- 随时还可以切换到wordpress
实现
我计划使用asp.net来进行这次改造,因为我对C#比较熟悉,你也可以使用asp/php/java/pytho都没关系,最重要的我有一个C#的框架,这样可以减小许多代码量。先将数据库文章读取为xml,然后通过xslt格式化xml为静态页面并保存,然后通过url rewiter重写到新的地址。新程序需要开发的功能大概如下:
- 读取文章列表页
- 读取文章页
- 读取评论
- 添加评论
- 访客日志(不记录详细日志)
- 前端功能(Html/CSS/Javascript)
问题
- 采用php和C#两种语言混合是不是不太好?
嗯,是不太好,但因为我使用asp.net比较熟悉,这样开发速度会比较快一些,因为我现在写的程序相当于一个拦截器,把用户读取请求都拦截起来,不会对原有的程序产生影响。同时,毕竟这不是产品级的,根据我的需求,我认为不会造成什么大的影响
本文来自涂雅[http://iove.net/],原文链接:http://iove.net/archives/1770.html,网站转载请注明来源于涂雅并保留原文链接,否则视为侵权。
嗯,或者你也可以收听我的微博,腾讯微博(主要用这个,其他的看我的个人介绍)
我写博客常常出现错别字,常常错得还很离谱,有时候我自己看了第二遍都骂我自个儿,但我又不习惯重复审查,纠结啊...各位看到啥错别字或者不明白的地方,请给我留言指出来,感谢感谢。
gmail.com
9个评论在 "实战旧城改造之——重构wordpress"
2010-10-10 17:30
我使用的 cos-html-cache 静态化插件。 现在已经有6000多篇文章了。
担心负载的问题。
2010-10-11 13:02
不在文章数量,在访问量
2010-9-15 12:03
对我来说还是有点深,我是新开博客的人。来取经
2010-4-29 08:55
wordpress改造有时候对seo是不利的,一般情况下选择好没伴,不装太多插件,wordpress负载还是挺高的
2010-4-29 10:05
郁闷的是有些插件是必需的,如果服务器在国内还好,在国外速度太慢了
2010-4-27 22:39
确实,那个插件兼容并不好
2010-4-28 18:08
停掉之后好像问题比较少一些了
2010-4-27 12:02
我服务器基本响应都在600左右,最低在190,最高900
2010-4-27 16:20
呵呵,不错啊,你服务器在国外当然不能比,我现在怀疑simple tags这个插件有问题,我已经停掉这个插件,目前没有发现500错误,有发现的给我吱个声,感谢#$%^&*()_