分享WordPress优化方案,缓解国内云服务器配置低下的问题

建站笔记2年前 (2023)发布 小萝卜头
670 0 0

有很多朋友留言问张戈博客的服务器配置如何,为什么能这么快?当知道张戈博客用的是阿里云最低档的 ECS 的时候,都觉得不可思议,因为他们用的更好的配置却没有达到张戈博客一半的速度。所以,我觉得自己有必要分享一些低配服务器下的 WordPress 优化方案,让更多人少花冤枉钱。

一、先晒配置
分享之前先贴一下张戈博客和中国博客联盟 2 个网站共用的服务器的配置以及负载情况。
①、基本配置
从下图可以看出,张戈所用 ECS 是阿里云最低的档次,而且是最便宜的青岛区域,多加了一块云磁盘用于数据容灾,整体资费为 52¥/月:

②、负载情况
很多朋友抱怨 WordPress 非常耗配置,经常 CPU 飚的很高!不得不承认,不做任何缓存的情况下,WordPress 多并发几个请求,负载就上去了!下面是张戈博客和中国博客联盟一天的 CPU 和网络负载:

很明显,不管是 CPU 还是网络负载,都非常低!我想说,这种情况下我在跑几个网站也没有什么问题。
二、优化方案
①、有无必要
上文也提到了,再不开缓存的情况下,WordPress 多并发几个请求就要卡出翔,确实这玩意非常臃肿!当然,很多建站前辈都会温馨提示,访问量不大不建议开启缓存啥的,否则各种蛋疼问题。确实也是这样,如果你不清楚缓存原理,网站访问量也很低,那么确实不推荐。
但是,如果你了解并能够轻松驾驭所用缓存,那么推荐你把缓存用好,用到极致!不要去信什么访问量不高就不用开缓存的建议,良好的网页加载速度,也是带来流量的基本因素!至少,我在百度搜索教程,如果那个网页好几秒还没出现第一屏,我就回头点开其他搜索结果了!
②、缓存方案
说了那么多,那么我简单总结一下 WordPress 的缓存优化方案,目前主流方案,大致有如下 2 类:

数据缓存:只缓存一些动态查询,第二次查询将有几率命中缓存,无需再次计算;
静态缓存:将页面直接缓存,并保存为文件存放,第二次访问直接调用。

数据缓存:根据缓存程度,我个人理解为轻度缓存,适用于流量中低等的网站。主要是缓存 php 的动态查询,减少直接访问数据库和 PHP 实时计算的次数,从而加快页面数据的生成。
数据缓存方案,张戈接触并用过的大概有如下几个做法:
1). 安装插件:比如 DB Cache Reloaded、Hyper Cache、WP Super Cache 等
2). 缓存组件:Redis、memcacheoqcache
Ps:当然,Hyper cache 和 wp super cache 也可以实现静态缓存。
静态缓存:这种做法是直接生成静态文件,甚至直接通过 WEB 服务器调用,而不再通过 PHP 计算。这样页面就是真正的纯静态,加载速度不言而喻!
静态缓存方案,依然有多种方法实现:
1). 插件缓存:WP Super Cache、cos-html-cache、Hyper Cache 等
2). 代码缓存:直接通过 PHP 代码,将数据流保存为 html 文件
3). WEB 缓存:直接通过 Nginx 或 Squid 来缓存数据
插件缓存,就不多说了,圈子里用的最多的方案,推荐入门级玩家使用。当然,张戈博客也分享过不少相关文章,感兴趣的童鞋可以凑合看看:

实现 WordPress 提交评论的时删除该页面的 WP-Super-Cache 缓存的方法
WordPress 结合阿里云 OCS 开启高速缓存,优化网站响应速度
百度蜘蛛狂暴了!nginx 下 wp super cache 的 mod_rewrite 规则
php 平滑重启 nginx,彻底清除 WordPress 的静态缓存
WordPress 评论 ajax 动态加载,解决静态缓存下评论不更新问题

代码缓存,这个方案张戈博客就分享过不少相关改进文章,这里就不赘述了:

WP Super Cache 静态缓存插件纯代码版(兼容多域名网站)
启用 WP Super Cache 纯代码版本之后的一些优化措施

WEB 缓存,我主要接触过 Nginx 和 Squid,目前在用的是 Nginx 缓存,效果非常不错!推荐有个人云主机的朋友使用:

Nginx 开启 fastcgi_cache 缓存加速,支持 html 伪静态页面

③、带宽尴尬
众所周知,国内服务器和国外服务器有个很鲜明的区别:国内的服务器出口带宽都是小水管,而且升级还特贵,不像国外动不动就是 G 管!唉,升级带宽性价比低下,那么该如何解决?
比如,张戈博客所用服务器只有 1M 带宽,从外部全速下载服务器上的一个文件,速度峰值也就 120kb/s 左右(某博客写文章说 1MB 带宽服务器对外下载速度可以达到 1M/s,我也是醉了)!而通过 CNZZ 不权威统计,张戈博客经常达到 30 人同时在线,如果不做优化,根本无法应付十多人同时访问!
该如何解决这个尴尬问题呢?张戈分享 2 个方案:
1). 动静分离、静态资源托管 CDN
所谓动静分离的做法就是,将网站的静态资源,比如图片、JS、CSS 等文件托管到 CDN,采用二级域名或第三方域名的方式来加载。这样的好处就是,打开网页时,只有 HTML 代码是从我们服务器上下载的,而相比 html 体积更大的静态文件都是从 CDN 请求出去的,那么我们的服务器也就只要承受很小一部分带宽占用了。
目前国内免费的 CDN 主要有七牛云又拍云,对于中低等流量的网站已基本够用。但是,对于每日流量过万,然后文章存在不少图片的网站来说,免费额度肯定不够用!
2). 使用国内免费的 CDN 缓存服务
目前国内用的比较多的是百度云加速360 网站卫士、加速乐和安全宝等。前 2 个我都用过,都很不错!使用此类 CDN,要注意以下 2 个问题:
动态网页会越用越慢
很纳闷吧?但事实的确是这样!我们先要弄清楚这些 CDN 加速的原理:当用户请求我们网页时,请求会发到 CDN 节点上,如果是动态数据,那么 CDN 节点将回源站拉数据,返回给用户!也就是说数据是经过了多次转发,加上 CDN 节点和源站的延迟,肯定是效果不明显,而且更慢!
这就不难解释,总是有人抱怨百度云加速越用越慢,而有人却说很快了。区别就是,快的人开启了云加速的整站缓存,而慢的人只是弄了一个 CDN 代理转发而已。
所以,如果使用此类 CDN 加速,那么建议先开启网站静态化缓存,然后到 CDN 那开启缓存即可!
CDN 缓存有没有生效,可以查看如下报表:

很明显,大部分是加速请求,访问流量只有少部分到了源站,所以我 1M 带宽算是给自己和搜索引擎用了,绰绰有余。顺便贴一下百度云加速文章页面的缓存设置:
遗憾的是,百度云加速只能设置 3 条规则,自己参考设置吧。
额外解析搜索引擎线路
很多朋友质疑,用这些 CDN 会不会影响 SEO?因为 CDN 节点 IP 经常变动!其实这个问题很好解决,额外解析一条搜索引擎线路即可!完全没必要被这个问题所困扰。

张戈博客选择百度云加速的原因也就是这个,我主要在意百度的 SEO,所以我用百度云加速,理由就是百度云加速有搜索引擎线路,而且是自家的产品,肯定是准确无误的。
④、更多优化
都已经纯静态化了,其实能继续优化的项目已经少之又少了。但是作为强迫症,还是有下手的地方的,那我简单的分享几个吧!
Cookies 优化
这也是百度站长平台页面优化时提示的项目:cookie 越小越好,而且对于静态文件需要避免设置 cookie。很多人纳闷百度的这个提示是什么意思?
其实简单的理解就是:网页中的 cookies 也是一种数据,也需要和服务器建立通信,占用流量带宽,cookies 虽然很小(几十字节到几 KB),但是如果一个页面有很多 cookies,总量就很可能达到几十 k!一个页面才几十上百 k 数据,你 cookies 就有几十 k,这是很恐怖的事情!极大的拖慢了整体加载速度!
而实际上,很多 cookies 是没必要的,尤其是网页中的静态文件!如果像张戈博客这样使用顶级域名,WordPress 默认会给所有文件带上 cookies,也就是将 cookies 写到了 .zhang.ge 这种通配域名上了,导致域名污染:当浏览器向服务器请求一个静态资源时,会先发送同域名下的 cookie,服务器对于这些 cookie 不会做任何处理。因此它们只是在毫无意义的消耗带宽。所以你应该确保对于静态内容的请求是无 coockie 的请求。
所以,对于静态资源,我们要用单独的域名,以减少无用请求,提高网页性能。下面说一下具体做法:
2016 年 12 月 11 日更新:当网站首选域名是顶级域名的时候,主站的 cookies 将写到所有的二级域名。比如张戈博客这样不带 www 的域名,则需要使用其他域名托管静态文件,比如张戈博客现在使用的是 res.zgboke.com,否则同一个域名下的二级、多级域名都会带上主站的 cookies,比如之前用的 res.zgboke.com!
因此,需要分带 www 和不带 www 的 2 种情况。
①、网站不带 www 的形式
在 wp-config.php 中加入如下代码:
//指定 cookies 的域名为网站主域名
define(‘COOKIE_DOMAIN’, ‘zhang.ge’);
准备一个不同于主站的静态域名,可以用七牛的 CDN 域名,也可以自己新建一个域名,比如张戈博客使用的是 res. zgboke.com,总之不能和主站共一个顶级域名.
最后在主题 functions.php 里面添加如下代码,将静态资源全部更换成这个域名:
/**
* CDN/静态域名替换函数(可用于七牛等 CDN)
* 相关文章:https://zhang.ge/5047.html
**/
ob_start(“Static_Switch”);
function Static_Switch($buffer){
$buffer_out = preg_replace(‘/http:\/\/zhangge\.net\/wp-([^”\’]*?)\.(jpg|png|gif|css|js|woff|woff2|ttf|svg|eot)/i’,’http://res.zgboke.com/wp-$1.$2′,$buffer);
return $buffer_out;
}
②、网站带 www 的形式
这种情况下就简单多了,在 wp-config.php 中加入如下代码:
//指定 cookies 的域名为网站主域名
define(‘COOKIE_DOMAIN’, ‘www.zhang.ge’);
然后参考上述 CDN 更换函数的代码,将静态文件更换成其他二级域名即可。
Ps:怎么添加二级域名,这里就不赘述了,请自行研究。实在不会可以使用七牛的 CDN 域名。
精简插件
这个问题不用多说,用 WordPress 的都知道,插件多了就会拖慢速度!但是,张戈并不是要大家把插件都给删了,而是能省则省!明明可以用简单代码实现的功能,你硬是要用插件来解决就不好了。
比如,WordPress 网站的 sitemap.xml,明明分享了WordPress 免插件生成完整站点地图(sitemap.xml)的 php 代码,完全就没必要装插件版。
又比如,禁止谷歌字体,明明还有非常简单的代码,偏偏有人就是喜欢用插件。。。
说了这么多,就是要告诉各位,你网站装的每一个插件,你是否去搜索过,是否有纯代码版本?是否有更好的替代方案?
好了,啰嗦了大半天了,最后再次总结一下张戈博客目前在用的主要优化方案:

整站前台开启 Nginx 的 fastcgi 静态缓存(相关文章)
使用百度云加速,并开启节点缓存
动静分离,并去掉静态文件的 cookies
利用 Nginx 将 avatar 头像缓存到本地(后续分享)
集成 QPCACHE,缓存某些不能静态缓存的数据
前台页面代码压缩优化(相关文章)

当然,我们还可以做更细的优化,比如合并 CSS、JS 等,就不赘述了,希望本文对你有所帮助!

收录于{张戈博客} 原文链接原文链接

© 版权声明

相关文章

暂无评论

暂无评论...