实战旧城改造之——重构wordpress


2010-4-27 00:00 wordpress,互联网 9个评论292

为什么?

凡事需要讲一个动机,搞IT的人都知道,我们现在的程序都是事件驱动的,而重构也是一样的,前段时间我在博客中讲到”你有勇气重构么?”,没想到我很快就出现这样的问题。我把本系列文章取名叫旧城改造,是因为我觉得现在很多网站和旧城改造一样,旧城已经不能满足需要了,但旧城里人口众多,不可能推倒重建。Wordpress只是一个很小的程序,我计划花一个周期的休息时间来改造,但我希望可以通过这次改造抛砖引玉,给大家提供一个参考。

WordPress是一个非常不错的博客程序,最重要的是,它支持各种各样的插件,全世界有成千上万的开发者在开发各有有趣的应用,和Firefox一样,如果没有插件,wordpress什么也不是。

问题就出在这里,因为插件的开发者水平可能也是参差不齐,插件是通过Hook进行的,所以一个页面可能经过大量的Hook,甚至有Bug的存在。访问量少还好一些,当访问量和订阅量大点的时候,就经常出现了超时错误和其它的一些500错误。同时网站速度非常慢,alexa的评分是19分,也就是只有19%的网站比我的网站慢。一方面给用户的体验不好,另一方面对SEO也是很不好的。再者就是我觉得博客的文件链接数太多,像javascript和css不同插件有不同的文件,导致了有很多的文件链接数。我大概总结了一些,现在有以下问题需要改进:

  1. 网站常常报出500错误,造成用户的流失,同时对搜索引擎也非常不友好
  2. 速度太慢,分两个方面,一个是程序太慢,另一方面是由于每个插件都有自己的js和css,造成css和js过多,虽然这些文件都不大,但是每次http请求都要消耗时间,造成速度过慢
  3. 我希望有24小时、昨天、本周、本月、本年的阅读排行,但目标没有找到合适的插件
  4. 近来可能有采集站在做采集,希望可以对这个进行一些防范
  5. 觉得用户体验不太好,希望可以加强和用户的互动

目标?

  1. 响应速度在2000毫秒以内
  2. 下载速度(用户看到整个页面的内容)不超过10秒
  3. 基本杜绝500错误,除非服务器出现问题
  4. 可以支撑三倍于现在的访问量
  5. Yslow测试可以在b级以上,最好在A级
  6. 良好的可扩展性,可以添加更多的功能(主要是前端的功能)

分析?

根据现状以及目标进行分析,发现主要问题是在于读数据上,浏览者可能写数据主要是两个地方,一个是留言,另一个是访问量统计,数据的变动性比较少。改造有两种方法,一种是自己写一个博客,另一个是在wordpress上修改。自己写控制起来肯定非常方便,但工作量会太大,而且wordress有很多功能是我需要的,比如说pingback,比如说Google XML Sitemaps的功能等等,这些功能如果要自己写的话,需要花很多的时间。

修改wordpress也有些问题,因为我本身对php不熟悉,并且我认为wordpress这种hook来hook去的,比较浪费资源。尝试过几种静态化插件,但发现都不能满足我的需求。根据前面的分析,速度慢主要是针对用户来说的,而用户主要是在读数据,那么我们可以这样,把读数据端进行改造,而写数据端,也就是后台部分保留。这样即可以利用现有wordpress的功能,又可以实现用户访问速度的提升。

思路

  1. 首页和文章页生成静态页,在文章被更新、删除、添加的时候触发。也可以使用手动
  2. 重写前端代码,包括JS/CSS/Html
  3. 评论及访问量的统计、评论采用Ajax读取,在用户已经下载完数据再数据,以提供响应速度,因为用户并不急着看评论
  4. 用户访问文章的时候,通过Ajax向服务器提交,服务器将记录用户的访问信息
  5. RSS必需静态化,因为各RSS阅读器会定期访问服务器,这也会造成服务器的压力
  6. 适当的时候,可以选择把首页和一些访问量大的页面进行缓存

原则

  1. 不改变现有的wordpress的任何代码,需要在发布文章的时候添加一个hook,以插件的方式实现,功能很简单
  2. 不改变现在的url,对用户和搜索引擎透明
  3. 随时还可以切换到wordpress

实现

我计划使用asp.net来进行这次改造,因为我对C#比较熟悉,你也可以使用asp/php/java/pytho都没关系,最重要的我有一个C#的框架,这样可以减小许多代码量。先将数据库文章读取为xml,然后通过xslt格式化xml为静态页面并保存,然后通过url rewiter重写到新的地址。新程序需要开发的功能大概如下:

  1. 读取文章列表页
  2. 读取文章页
  3. 读取评论
  4. 添加评论
  5. 访客日志(不记录详细日志)
  6. 前端功能(Html/CSS/Javascript)

问题

  1. 采用php和C#两种语言混合是不是不太好?

嗯,是不太好,但因为我使用asp.net比较熟悉,这样开发速度会比较快一些,因为我现在写的程序相当于一个拦截器,把用户读取请求都拦截起来,不会对原有的程序产生影响。同时,毕竟这不是产品级的,根据我的需求,我认为不会造成什么大的影响

无觅相关文章插件,快速提升流量

嗯,或者你也可以收听我的微博,腾讯微博(主要用这个,其他的看我的个人介绍)

我写博客常常出现错别字,常常错得还很离谱,有时候我自己看了第二遍都骂我自个儿,但我又不习惯重复审查,纠结啊...各位看到啥错别字或者不明白的地方,请给我留言指出来,感谢感谢。

  

  • 9个评论在 "实战旧城改造之——重构wordpress"

  • shell
    2010-10-10 17:30
    回复TA

    我使用的 cos-html-cache 静态化插件。 现在已经有6000多篇文章了。

    担心负载的问题。

  • wodingdong
    2010-9-15 12:03
    回复TA

    对我来说还是有点深,我是新开博客的人。来取经

  • 经典语录
    2010-4-29 08:55
    回复TA

    wordpress改造有时候对seo是不利的,一般情况下选择好没伴,不装太多插件,wordpress负载还是挺高的

    • 涂雅
      2010-4-29 10:05
      回复TA

      郁闷的是有些插件是必需的,如果服务器在国内还好,在国外速度太慢了

  • Firm
    2010-4-27 22:39
    回复TA

    确实,那个插件兼容并不好

    • 涂雅
      2010-4-28 18:08
      回复TA

      停掉之后好像问题比较少一些了

  • Firm
    2010-4-27 12:02
    回复TA

    我服务器基本响应都在600左右,最低在190,最高900

    • 涂雅
      2010-4-27 16:20
      回复TA

      呵呵,不错啊,你服务器在国外当然不能比,我现在怀疑simple tags这个插件有问题,我已经停掉这个插件,目前没有发现500错误,有发现的给我吱个声,感谢#$%^&*()_

  • 评论敬告那些为做SEO而评论的朋友,本博不欢迎此类评论,请不要利用本博做关键字,一律封杀。

    绝不跨省追捕
    不会发垃圾邮件
    增加你的流量