WordPress通用优化策略及常用插件推荐

WordPress 安装很方便,可以说是开箱即用。但是随着文章增多,访问量增大,会发现 WordPress 很“慢”。这是 WordPress 本身的 PHP 运行机制导致的,每篇文章都要去数据库读取,而且 WordPress 为了支持各种功能,现在已经非常臃肿,每次请求都要加载很多东西。但正是 WordPress 的功能强大,让我们也能很方便的做各种优化。

0x1 使用最新版本的 PHP 和 MySQL

毫无疑问升级基础运行环境是提高性能最好的方式之一。特别的 PHP7 和 MySQL 5.7 较之前的版本性能提升很大。还可以根据服务器配置适当调整 PHP-FPM 和 MySQL 参数

0x2 使用缓存插件

这里的缓存有两层意思,一是 PHP 层面的运行数据缓存,二是文章页面静态化。这里推荐两个插件来解决这个问题:

1. Redis Object Cache 一款持久对象缓存插件。其实 WordPress 本身带有对象缓存功能,但是是把序列化的对象缓存在文件中,效果不是很好。这个插件通过重写 object-cache.php 文件,把对象缓存到 Redis。直观的感受就是不光前台页面加载速度快了,而且后台响应速度提升更大。

2. Cache Enabler keycdn 公司开发的一款页面静态化缓存的插件。相比 wp-supercache 等插件更加简洁和强大。建议按照官方说明进行增强设置。我使用的是 Nginx,除了正常设置 gzip 外还开启了 gzip_static 参数,让 Nginx 在读取文件的时候优先读取带 gz 后缀的静态文件,不用再做 gzip 压缩。

顺带推荐一个 gzip 检查网站:https://www.giftofspeed.com/gzip-test/

不过使用高级设置后需要把缓存有效期设置为 0(永不失效),可能会造成缓存不会被更新(正常情况下更新文章缓存会被更新)。这里我是通过删除缓存文件然后访问自己 sitemap 中的链接来刷新缓存:

https://gist.github.com/iyaozhen/53e6a57a2f7e945ba1161953959a7cb2

0x3 使用 CDN 和图片压缩

用户有时候感觉网站慢,更多的是静态资源加载慢。页面上的 JS、CSS、图片等都需要消耗服务器带宽。而且中国地域辽阔,跨地区、跨运营商更是问题。这时就需要 CDN 了。现在国内各个云都在相互竞争,CDN 比较便宜,免费的也有很多。我之前使用的是七牛云,不过自从服务器迁到腾讯云之后, CDN 也换到了腾讯(免费12个月)。这里推荐同为 keycdn 出的 CDN Enabler 插件,能将页面中的链接替换为 CDN 链接。同时推荐使用 WP Smush 压缩图片,还有使用 BJ Lazy Load 实现图片懒加载(显著提高首屏加载速度)。最后不要忘记站点和 CDN 都配置一下防盗链。

0x4 升级到 HTTP2

HTTP2 支持请求复用,能提高50-70%的加载速度。首先要配置 HTTPS,再简单的配置下就能支持 HTTP2 了。当然静态资源使用的 CDN 最好也要支持 HTTP2,目前国内就又拍云和老牌 CDN 厂商支持,不过其它的很快也会支持了。

0x5 配置dns-prefetchpreconnectprerender等资源加载参数

Continue Reading…

WordPress 国内优化

众说周知 WordPress 是全球使用量第一的开源博客系统,本博客就是基于此搭建的。但是 WordPress 在国内有些水土不服,有些地方没有考虑中国的国情(GFW),需要做一些小优化。以下代码直接添加在主题或者子主题的模板函数 (functions.php)文件中即可,此文件可在后台直接编辑(外观->编辑)。

1. 移除 Google CDN 字体。英文博客使用 web-font 还是很不错,各个平台使用同一种字体,极大地提升了用户体验,但是中文博客基本用不上,而且 Google CDN 被墙,还会极大影响页面加载速度,所以还是直接去掉吧。

2. Gravatar 地址替换。WordPress 默认使用的几个 Gravatar 头像地址都被墙了,建议替换为 V2ex 提供的 CDN 地址(支持 HTTP2)。注意,官方地址路径为 /avatar,V2ex 的 CDN 为 /gravatar。

3. 使用最新的 jQuery 以及使用 CDN(BootCDN,支持 HTTP2)。需要注意测试,可能有些插件会有兼容问题。

4. 移除自动 dns-prefetch。WordPress 4.6 增加了 dns-prefetch 功能,他会分析页面注入的 js 等脚本然后,加入 DNS 预加载列表。wp-includes/general-template.php:

当然这个功能出发点是好的,但是有些域名解析很慢,预加载可能会拖慢速度,而且我也不需要使用 emoji 和 Google 字体(默认预加载了这两项)。

建议使用插件 instant-articles 来手动设置 DNS 预加载。

目前本博客只进行了这几点国内环境的特色优化,若其它小伙伴还有什么黑科技欢迎评论。当然除了中国特色,也有一些很有效的通用优化策略,敬请期待下篇博文。

参考资料:

最近针对 V2EX 的 Gravatar 头像加载做了一个优化,https://www.v2ex.com/t/141485

http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/

https://wordpress.org/support/topic/remove-the-new-dns-prefetch-code/