再谈 Wordpress 的速度优化

随着页面的静态化,大部分插件已经不会对页面载入速度构成威胁。所以 Wordpress 的优化关键并不是精简插件,而是优化 Wordpress 每一个插件的行为。有通过 <?php wp_head(); > 注入 js 和 Css 的插件是必须优化的对象,这类插件用得越多,页面在打开之前需要载入的内容也就越多。其结果便是直接影响一个 Blog 的页面载入速度。

最为简单的优化方法是这样的:查看你首页的源代码,和你当前模板里的 header.php 对比,相较之下在 wp_head() 附近多出来的内容便是插件或者 Wordpress 自己注入的代码。先将多出的内容 copy 下来,然后删除模板内的注入接口 <?php wp_head(); >。接着,把属于 css 类型的代码拷贝到模板的 style.css 里面,再把 js 类的内容都放到 footer.php 里面去。如此优化便完成了。

不过这样的优化方法不够通用。Wordpress 自己也往 header.php hook 代码

<link rel="alternate" type="application/rss+xml" title="Shawn Blog Feed" href="http://feed.ishawn.net" />
<link rel="pingback" href="http://ishawn.net/xmlrpc.php" />
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://ishawn.net/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://ishawn.net/wp-includes/wlwmanifest.xml" />

以上代码是 Wordpress 核心内容,它们令你的 Blog 支持 trackback 和远程发布还有 feed 订阅。去掉注入接口之后,这些是你应该粘贴并保留在 header.php 里面的东西。

All in One SEO Pack 一类有根据页面来 Hook 不同内容到 header.php 的插件,是优化的难点。没了注入接口,它们的主要功能(AIOS的meta)会失效,但是保留注入接口,优化又变成了一项复杂的工程。

保留注入接口,然后逐一修改插件,是为另一种方法。有注入能力的插件,代码里肯定有 add_action,所以你可以只留下 AIOS 一类的 add_action,其余的全部注释掉。当然这么做日后维护相当麻烦,每次插件升级,又得重新改。使用 Flash+JS 一类的插件,上面的方法也不太适用,这类插件大部分都要求必须在头部载入 js。投票打分插件同样,js 得先于内容载入,否则会出错。

我没有使用太多插件,好多插件只是听过而没有用过,所以无法针对不同的插件给出优化方法。不过我建议每个 Wordpress 的用户都最好清楚你正在使用的插件和它们的行为,这样对你针对性优化是有好处的。

有优化需要的朋友可以先试用我说的"最简单的优化方式",之后找出失效的插件,再针对这些插件做出取舍或者修改。

Tag(s): ,
  • QQ书签
  • Del.icio.us
  • 百度收藏
  • Google
  • 饭否
  • FriendFeed
Shawn Published@17:07 / 2008-10-30 / Trackback / Skip
34 Comments Contributed by Visitors
  1. rebuttoniColor / 18:26@2008-10-30 1
    iColor

    这么快吗?? :grin: :cool: :lol: :smile:

  2. rebuttoniColor / 18:27@2008-10-30 2
    iColor

    Safari的RSS效率还不错吧,,我不用它阅读,,只是让它提醒有朋友更新了..不太习惯在RSS订阅界面读,,一般都直接写文章页面看.

  3. rebuttonShawn / 18:31@2008-10-30 3
    Shawn

    @iColor: 我那里有发布时间的,可见是 safari 慢了。。。

  4. rebuttonfqch / 19:27@2008-10-30 4
    fqch

    我也不慢~~哈哈~

    求速度应该减少http://吧?

  5. rebuttonShawn / 19:30@2008-10-30 5
    Shawn

    @fqch: 减少 http 请求其实是间接优化,把拖慢载入的元素放到页面的最后才是真正能够让访客有直接感受的优化方法。

  6. rebuttonShawn / 19:31@2008-10-30 6
    Shawn

    @fqch: 你的很快。。。那是因为你用了国内的空间嘛。还有你没用什么"注入式"插件。

  7. rebuttonleehow / 20:11@2008-10-30 7
    leehow

    你简直写疯了...

  8. rebuttonShawn / 20:12@2008-10-30 8
    Shawn

    @leehow: 这两天比较有写的。。。

  9. rebuttonleehow / 20:31@2008-10-30 9
    leehow

    @Shawn: 不要写太多哦,要不你还有时间看美剧啊。

  10. rebuttonMY-Hou / 20:33@2008-10-30 10
    MY-Hou

    对现在的速度还是比较满意的 :grin:

  11. rebuttonShawn / 20:36@2008-10-30 11
    Shawn

    @MY-Hou: 恩,作为 Dreamhost 的用户,你的 Blog 速度不错了。

  12. rebuttonJor / 20:39@2008-10-30 12
    Jor

    继续来学习。 :smile:

  13. rebuttonsofish / 20:40@2008-10-30 13
    sofish

    如果我不用大图片,估计,速度也可以不错。哈哈... 你的速度就太赞了,因为你的效果很多,很难得。

  14. rebuttonJor / 20:40@2008-10-30 14
    Jor

    你图像缓存多久清空一次的? :?:

  15. rebuttonShawn / 20:42@2008-10-30 15
    Shawn

    @sofish: 我有强迫症 :???: 所以对速度追求是无止境的。。。

  16. rebuttonShawn / 20:43@2008-10-30 16
    Shawn

    @Jor: 你不说我又忘了,我设置成半个月清空一次,看来要缩短时间。

  17. rebutton / 21:48@2008-10-30 17
    时

    来学习了呵呵

  18. rebuttoncosbeta / 21:55@2008-10-30 18
    cosbeta

    @Shawn: 我再也没有这个爱好了,看来小伙子现在比较有空闲了

  19. rebuttonShawn / 21:57@2008-10-30 19
    Shawn

    @cosbeta: 估计我很快也会厌烦。。。

  20. rebuttonShawn / 22:43@2008-10-30 20
    Shawn

    @时: 你的 Blog 怎么打不开了?

  21. rebutton老所 / 0:16@2008-10-31 21
    老所

    我的博客是shawn认为的过度加载的重灾区。

    最近发现一个CakePHP的很好的功能,就是可以用PHP写Shell,从后台命令行执行,并且可以使用项目里的数据库链接和对象,非常方便,如果WP有这个功能就好了,直接写个shell,输出wp_head()的内容,然后调试即可。我还是不太习惯网页的调试方法。

  22. rebuttonShawn / 0:22@2008-10-31 22
    Shawn

    @老所: 谁让你是专门搞后台的。。。。Wordpress 肯定不会添加这个功能,因为它对普通用户来说使用门槛太高。并且,Wordpress 的插件不是通过数据库链接的对象,数据库只保存基本设置数据,其余的东西都是通过 wordpress 已经预置的接口注入的。

  23. rebutton老所 / 2:13@2008-10-31 23
    老所

    我估摸着我那个首页的featured post图片切换可能太耗CPU了,我看了下,设的是4秒换一次,太频繁了,我把它改成了20秒换一次。有空你看看我的首页是不是还是那么恐怖,让你的风扇风生水起。

  24. rebuttonleehow / 7:52@2008-10-31 24
    leehow

    冬天要来了,又要备置新鞋。

  25. rebutton / 9:12@2008-10-31 25
    时

    @Shawn: 
    网通的问题。客服说了,今天中午前应该搞好了。

  26. rebutton西崽猪猪 / 10:28@2008-10-31 26
    西崽猪猪

    :cool: 貌似没多大效果- -

  27. rebuttonZH CEXO / 12:50@2008-10-31 27
    ZH CEXO

    我不懂……但是我对我的速度还是很满意的,因为我的博客里面图片不是很多,而且我的空间速度还行~

  28. rebuttonJor / 14:36@2008-10-31 28
    Jor

    @老所:  :???: 冬天来了,多去去你那边,机器会很温暖…… :grin:

  29. rebuttonShawn / 15:34@2008-10-31 29
    Shawn

    @时: 现在可以访问了。

  30. rebuttonShawn / 15:35@2008-10-31 30
    Shawn

    @西崽猪猪: 你用的是 meyu 的空间吧?本来就挺快的,再快就看不出效果了 :shock:

  31. rebuttonShawn / 15:36@2008-10-31 31
    Shawn

    @ZH CEXO: 哈哈,你用的也是国内的空间。看来我没说清楚,这个操作对国内空间来说不会有太大效果,因为国内的空间本来速度就比较快了 :smile:

  32. rebutton西崽猪猪 / 15:51@2008-10-31 32
    西崽猪猪

    @Shawn: 是的呵呵 :wink:

  33. rebutton老所 / 15:57@2008-10-31 33
    老所

    @Jor: 是啊,想想都温暖,暖气费都省了,最好再开台笔记本访问我的博客,然后垫在脚下。

  34. rebuttonShawn / 16:00@2008-10-31 34
    Shawn

    @老所: 是比之前好些了,但还可以更好的。。。囧

  35. rebutton老所 / 16:03@2008-10-31 35
    老所

    @Shawn: 这个改动,改动小,见效快,何必囧呢?呵呵 话说你的网站刚才一度无法访问,害得我留言白写了。

  36. rebuttonShawn / 16:08@2008-10-31 36
    Shawn

    @老所: 可能是 DNS 暂时重启,我对新网互联的域名DNS真的无语了,以前半夜三更重启也无所谓,现在净选白天搞。

  37. rebuttonzEUS. / 17:29@2008-10-31 37
    zEUS.

    很实用的文章啊~ 通俗易懂!
    闲下来的时候我就折腾一下~ :razz:

  38. rebuttonShawn / 17:35@2008-10-31 38
    Shawn

    @zEUS.: 你也用的国内的空间 :grin: ,不过倒是真的有必要稍稍优化一下,你装了好多插件啊~

  39. rebuttonaunsen / 18:10@2008-10-31 39
    aunsen

    虽然很讨厌做这样的工作,貌似不整又不行,有点闷 :oops:

  40. rebuttonShawn / 18:12@2008-10-31 40
    Shawn

    @aunsen: 有机会我帮你整一下,然后你看看效果,满意吧?

  41. rebuttonJoBru / 20:03@2008-10-31 41
    JoBru

    All in one seo pack 这个插件我就是这样搞的,不过其它的我就都不懂了~ :???: :eek:

  42. rebuttonJor / 20:06@2008-10-31 42
    Jor

    @Shawn: 国内dnspod的不错哦。 :eek: :eek:

  43. rebuttonShawn / 20:32@2008-10-31 43
    Shawn

    @Jor: dnspod 是掉线大王。

  44. rebuttonShawn / 20:37@2008-10-31 44
    Shawn

    @JoBru: 为啥要搞 aiosp ?

  45. rebuttonJor / 21:20@2008-10-31 45
    Jor

    @Shawn:  :mad: 用enom自带的。

  46. rebuttonnetputer / 22:43@2008-10-31 46
    netputer

    嘿嘿,迟来的评论~
    深刻领悟中,即将有心得啦哈…

  47. rebuttonShawn / 22:49@2008-10-31 47
    Shawn

    @netputer: 我就等着看你的作品呢。

  48. rebuttonCenteur / 8:25@2008-11-02 48
    Centeur

    阅微堂的 wordpress 系列优化文章也有所提及,不过不知道这个对 wordpress 的速度到底有多大影响,或许有空的时候你可以写一个影响 wordpress 速度的因素之面面观,然后再按权重排名,呵呵。 :smile:

  49. rebuttonShawn / 14:28@2008-11-02 49
    Shawn

    @Centeur: 我看过阅微堂的优化系列文章,基本涵盖了所有因素。
    但是不好说,我只是把我认为的影响最大的提出来了。一个页面载入伊始,head 标签里的内容多寡决定了 body 内容出现的速度。
    不知道你觉得我这里速度如何,我放在国外空间,感觉这个速度基本已经是极致了。。。

  50. rebuttonCenteur / 12:45@2008-11-04 50
    Centeur

    速度还不错,不知道你放在国外什么空间?

  51. rebuttonShawn / 12:47@2008-11-04 51
    Shawn

    @Centeur: HostGator,我看你用的 Lunar Pages 是吧?

  52. rebuttonCenteur / 13:14@2008-11-04 52
    Centeur

    是的。HostGator 貌似成人站点也可以放,最好买个独立 IP 安全点。

  53. rebuttonShawn / 13:17@2008-11-04 53
    Shawn

    @Centeur: HG 现在基本不准放成人内容了,即使可以也是单独的地方。

  54. rebuttonㄤ男 / 1:05@2008-11-14 54
    ㄤ男

    ......呃,對於我來說,實在是太難了...... :cry:
    不過把一些元素放在頁尾倒是很簡單的做法,只是進度條它一直不完結,也讓人很糾結啊...

  55. rebuttonShawn / 1:59@2008-11-14 55
    Shawn

    @ㄤ男: 无论进度条是否完结都不会拖慢主要元素的载入,这样还是不错的吧。最好还是能够合并 JS,直接减少页面的 http 请求数。

  56. rebuttonadomit / 23:58@2009-01-06 56
    adomit

    @Shawn:终于说到重点了。

  57. rebuttonadomit / 23:59@2009-01-06 57
    adomit

    一会就去看看HEAD怎么优化合适。。。特别是那句放到最后。

  58. rebutton小三 / 12:46@2009-04-06 58
    小三

    你的意思就是说要把……以内的JS文件都放到Foot下面去吗?我看了一下我的首页的源代码,……里面都是好多插件的JS。没有几个CSS的,能指导下怎么修改吗?谢谢!

Leave Comments Here...

必填

必填&保密

随您

支持Ctrl+Enter快捷提交

  • 已部署"白忙活" Anti-Spam 系统,猪肉 Spammer 请注意查看源代码链接处。
  • 本站不会泄露您的邮件地址,敬请放心。
  • 支持常用 HTML 代码调用,插入 PHP 代码需注意:< = &lt;> = &gt;
  • 仅当某人针对您的评论做出回应时,您才会收到由本站发出的通知信件。
  • 如您希望以相同方式通知某位网友,请点击 Reply 按钮,或自行输入 @对方名字:
  • 鼠标移至评论列表中的 @someone: 区域即可自动显示 someone 的评论内容。

Shawn Blog

Shawn的个人博客(Blog),分享Wordpress技巧和Firefox浏览器心得,关注Web 2.0应用发展,记录对虚拟主机的使用评价。