昨天通过一个网页测速网站得知,我的网站加载时间居然长达20秒,惊得我下巴都掉下来了。如何加快网页加载速度呢?我使用了一个插件:WPJAM。
一、开启Memcached内存缓存优化
开启Memcached的条件是对服务器有完全的操作权限,云服务器可以有,但是虚拟主机就很麻烦了。
安装memcached服务和php-memcached扩展
我使用的lnmp.org搭建web环境,它提供了安装Memcached服务的脚本:
1 | sudo ./addons.sh install memcached |
或者直接使用:
1 | sudo ./addons.sh |
然后选3:
然后选2,安装php的memcached扩展:
安装opcache服务
1 | sudo ./addons.sh install opcache |
通过WPJAM插件开启Memcached缓存
安装了opcache、memcached、php-memcached之后,再将WPJAM插件中的 wpjam-basic/template/
目录下的 object-cache.php
文件复制到 wp-content
目录下即可启用Memcached缓存了。
在后台菜单的WPJAM系统信息中,可以查看memcached运行状态:
开启Memcached内存缓存优化后,每次访问网站,都会优先到内存中读取结果,没有命中缓存的话再去数据库查询,可以有效加快网页打开速度。
二、动静资源分离
由于我的云服务器是1M小水管,理论最大下行速度是128K/S,同样是影响网页打开速度的因素之一。我通过WPJAM插件的CDN加速功能,对网站静态内容进行了分离。对象存储和CDN我都是用的腾讯云。
配置对象存储和加速域名
在腾讯云的对象存储设置里,新建一个存储桶。存储桶的基础设置里,找到回源设置。我的配置如下:
回源地址就是源站地址,由于我的原站开启了跳转HTTPS,所以回源协议强制HTTPS,减少重定向次数。
然后在域名管理里,绑定自定义加速域名,我用的cdn.huanzhi.wang,CNAME解析到腾讯云提供的地址。国内使用自定义加速域名要求域名备案。然后为了开启全站HTTPS,在腾讯云申请一个免费SSL证书,绑定到CDN中,并开启HTTPS和HTTP2.0。
腾讯云每个月会有10G的免费CDN流量包,对于个人小站来说完全够用了。
配置WPJAM Basic插件
在WPJAM Basic插件的CDN加速页面,设置CDN域名为刚才绑定的自定义加速域名。
然后在本地设置中,设置需要缓存静态文件的扩展名、目录以及本地域名。
配置好以上设置后,静态文件分离就完成了。
工作流程及原理
WPJAM插件将静态文件的地址替换为CDN地址,当第一次访问网页时,浏览器向CDN发出GET请求,CDN在COS存储中找不到该文件,于是回源站抓取资源并保存到对象存储中。第二次访问网页,则直接在COS中读取数据。
静态文件分离有效的降低了服务器负债及带宽消耗,至于腾讯云的对象存储和CDN费用,按我现在这个访问量,一年可能就十几块钱吧。
三、上传图片自动压缩
我用的是TinyPNG开发的Compress JPEG & PNG images插件,这个插件可以在上传图片时,自动将所有大小的图片在Tinypng网站上进行压缩,免费版有每个月500张图片的额度。
如果每张图片上传后被WordPress压缩成3种大小,则每个月可以上传167张图片。自动压缩的好处是非常方便,不用自己每次上传图片的时候来手动压缩和优化了。图片的大小压缩之后,一是省流量、二是省空间。
四、禁用Google字体
WordPress默认的后台和主题都是用了谷歌在线字体,但是在中国大陆访问速度相当慢,于是,需要替换国内源或者直接禁用。我选择了直接禁用,使用Disable Google Fonts插件,安装好无需任何配置,就把谷歌字体禁用了。
经过这次速度优化以后,我的网页打开速度在没有本地缓存的情况下,基本能达到3秒以内了,主体内容加载时间在500ms左右。这个速度我也比较满意了,我的要求也不高,不追求那种极致到秒开的速度。