优化 WordPress 页面到一秒内

本帖系技术贴,目的在于总结一下这次对本站点优化的经历。总之结果很重要,把基本上所有页面都优化到大约 0.8 秒左右的载入速度。如果你也是在独立 LAMP 服务器上运行 WordPress 的话,我想本文可能对你会有所帮助。 

Wordpress 服务器配置

服务器是在阿里云上的主机,主机的配置比较低:1vCPU,1GB 内存;后台数据库是 RDS 服务。

pic-003

服务器的操作系统是 Debian,安装的 php 的情况见 phpinfo.php 的输出。

WordPresss 所安装的插件如下:akismet syntax-highlighter download-monitor update-twitter-php google-sitemap-generator use-google-libraries wordpress-popular-posts wordpress-seo jiathis wp-easyarchives kimili-flash-embed wpjam-qiniu memcached wp-pagenavi nextgen-gallery wp-postviews optimize-db wp-recentcomments regenerate-thumbnails wp-super-cache revslider wp_video-master shortcodes-ultimate yet-another-related-posts-plugin simple-google-analytics

Wordpress 插件:WP Super Cache

Super Cache 使用的是: mod_rewrite 缓存模式。 并开启了:使用对象缓存系统来存储缓存文件。 (实验室功能)  这个功能和 memcached 插件是相关的。在 CDN 的配置这里,开启了 CDN 的支持,并把 off-site URL 指向了 http://martinliu.qiniudn.com 七牛的空间。

pic-002

现在很多页面查看源码的时候,都可以看到是 0.8 秒以内的速度,这个速度起码是本站点有史以来的最快速度。不光服务器速度快了,更重要的是所有静态文件也都是用的大陆的本土 CDN 站点了。

Wordpress 插件:**memcached 和 MemCached 服务

**

这个插件我第一次用,真可谓是神器,它需要和操作系统的 memcached 服务配合起来使用;这个插件的安装比较反常规:不能在控制台里面启用,根本就启用不了,需要安装插件后,在未激活的状态下,把它的文件手工放到 wp-content 目录里面即可。操作系统的 memcached 的服务安装和配置也比较简单,总之运行基本全都靠默认的配置参数即可。另外 php 的 memcached 模块也要安装并启用。它们配合起来能够把页面的 request 次数降低到冰点。我的主页用这个组合之前需要 30 次左右的 request,用了之后就 3 次了,它主要是靠内存做缓存,从而加速了网站。

pic-3

上图是本站首页的测试结果,亮点在它只有 3 个请求,Web 服务器只是做了三个响应就完事了,这个页面的内容就全都可以发给浏览器了。减少了 20 多次请求的处理,这些请求的结果都被 memcached 给缓存到内存里面了,目前只能够给 memcached 开 80MB 的缓存空间,也就这点内存常驻的网站缓存解决了大问题。加速页面的响应速度。不得不说 memcached 服务还是挺 NB 的。

pic-001

上图是一个常规的文章页面,请数量从以前的 30 左右降到 10 以内,我什么也不说了。当然上面这连个图里面也能看出本网站的一点问题,这里也不说了。

Wordpress 插件:WPJAM 七牛镜像存储

本次折腾主要冲着这个来的。CDN 我是第一次玩,不过用一次之后,感觉也挺简单的。先要找一个免费的 CDN 服务商开一个空间,之后一般送 1GB 空间一个月 1GB 流量,对我的网站来说足够了。配置完之后就拿到了一个二级域名,然后还有几个重要的 Key 编码。安装了水煮鱼做的这个插件之后,配置完,什么也不用管,网站的哪些静态文件就在首次访问的时候,被自动传到 CDN 上面了,下次网页再被打开的时候就全都走 CDN 上下载了,从而把 Apache 的基本所有静态文件的请求都 offload 走了,从而降低了服务器的负荷,提升了它对动态内容的反应速度。我的服务器只有 1GB 内存,用了 CDN 之后,我也不是很担心内存不够用的问题了。

未尽事宜

由于时间仓促,有几个活也没有时间做。1)我的域名 martinliu.cn 的 DNS 查询的速度有时候挺慢的,快也要 500ms,有时候甚至超过一两秒,不知道是 DNSPod 不给力还是我的服务器自身有问题。2)CDN 的正规用法需要在服务器端写一个脚本,把 wordpress 里面需要 CDN 加速的文件都上传到自己 CDN 的空间里面,并且可以编写脚本定期增量传输。由于最近太忙,以后有时间在研究这个问题吧。3)wordpress-popular-posts 此插件在每个页面上都占用一定的时间,不知道是否能把它消除到。4)Gravatar 头像的加速,否则这些图标在评论多的帖子上从国外站点下载,实在是太慢了。

comments powered by Disqus
本博客始于 2007 年
Built with Hugo
主题 StackJimmy 设计