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

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

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

一、先晒配置

分享之前先贴一下张戈博客和中国博客联盟2个网站共用的服务器的配置以及负载情况。

①、基本配置

从下图可以看出,张戈所用ECS是阿里云最低的档次,而且是最便宜的青岛区域,多加了一块云磁盘用于数据容灾,整体资费为52¥/月:

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

②、负载情况

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

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

很明显,不管是CPU还是网络负载,都非常低!我想说,这种情况下我在跑几个网站也没有什么问题。

二、优化方案

①、有无必要

上文也提到了,再不开缓存的情况下,WordPress多并发几个请求就要卡出翔,确实这玩意非常臃肿!当然,很多建站前辈都会温馨提示,访问量不大不建议开启缓存啥的,否则各种蛋疼问题。确实也是这样,如果你不清楚缓存原理,网站访问量也很低,那么确实不推荐。

但是,如果你了解并能够轻松驾驭所用缓存,那么推荐你把缓存用好,用到极致!不要去信什么访问量不高就不用开缓存的建议,良好的网页加载速度,也是带来流量的基本因素!至少,我在百度搜索教程,如果那个网页好几秒还没出现第一屏,我就回头点开其他搜索结果了!

②、缓存方案

说了那么多,那么我简单总结一下WordPress的缓存优化方案,目前主流方案,大致有如下2类:

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

数据缓存:根据缓存程度,我个人理解为轻度缓存,适用于流量中低等的网站。主要是缓存php的动态查询,减少直接访问数据库和PHP实时计算的次数,从而加快页面数据的生成。

数据缓存方案,张戈接触并用过的大概有如下几个做法:

1). 安装插件:比如 DB Cache Reloaded、Hyper Cache、WP Super Cache等

2). 缓存组件:Redis、memcache、oqcache等

Ps:当然,Hyper cache 和 wp super cache 也可以实现静态缓存。

静态缓存:这种做法是直接生成静态文件,甚至直接通过WEB服务器调用,而不再通过PHP计算。这样页面就是真正的纯静态,加载速度不言而喻!

静态缓存方案,依然有多种方法实现:

1). 插件缓存:WP Super Cache、cos-html-cache、Hyper Cache等

2). 代码缓存:直接通过PHP代码,将数据流保存为html文件

3). WEB缓存:直接通过Nginx或Squid来缓存数据

插件缓存,就不多说了,圈子里用的最多的方案,推荐入门级玩家使用。当然,张戈博客也分享过不少相关文章,感兴趣的童鞋可以凑合看看:

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

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缓存有没有生效,可以查看如下报表:

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

很明显,大部分是加速请求,访问流量只有少部分到了源站,所以我1M带宽算是给自己和搜索引擎用了,绰绰有余。顺便贴一下百度云加速文章页面的缓存设置:分享张戈博客的WordPress优化方案,缓解国内云服务器配置低下的问题

遗憾的是,百度云加速只能设置3条规则,自己参考设置吧。

额外解析搜索引擎线路

很多朋友质疑,用这些CDN会不会影响SEO?因为CDN节点IP经常变动!其实这个
问题很好解决,额外解析一条搜索引擎线路即可!完全没必要被这个问题所困扰。

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

张戈博客选择百度云加速的原因也就是这个,我主要在意百度的SEO,所以我用百度云加速,理由就是百度云加速有搜索引擎线路,而且是自家的产品,肯定是准确无误的。

④、更多优化

都已经纯静态化了,其实能继续优化的项目已经少之又少了。但是作为强迫症,还是有下手的地方的,那我简单的分享几个吧!

Cookies优化

这也是百度站长平台页面优化时提示的项目:cookie越小越好,而且对于静态文件需要避免设置cookie。很多人纳闷百度的这个提示是什么意思?

其实简单的理解就是:网页中的cookies也是一种数据,也需要和服务器建立通信,占用流量带宽,cookies虽然很小(几十字节到几KB),但是如果一个页面有很多cookies,总量就很可能达到几十k!一个页面才几十上百k数据,你cookies就有几十k,这是很恐怖的事情!极大的拖慢了整体加载速度!

而实际上,很多cookies是没必要的,尤其是网页中的静态文件!如果像张戈博客这样使用顶级域名,WordPress默认会给所有文件带上cookies,也就是将cookies写到了 .zhangge.net 这种通配域名上了,导致域名污染:当浏览器向服务器请求一个静态资源时,会先发送同域名下的 cookie,服务器对于这些 cookie 不会做任何处理。因此它们只是在毫无意义的消耗带宽。所以你应该确保对于静态内容的请求是无coockie的请求。

所以,对于静态资源,我们要用单独的域名,以减少无用请求,提高网页性能。下面说一下具体做法:

2016年12月11日更新:当网站首选域名是顶级域名的时候,主站的cookies将写到所有的二级域名。比如张戈博客这样不带www的域名,则需要使用其他域名托管静态文件,比如张戈博客现在使用的是 res.zgboke.com,否则同一个域名下的二级、多级域名都会带上主站的cookies,比如之前用的res.zhangge.net!

因此,需要分带www和不带www的2种情况。

①、网站不带www的形式

在 wp-config.php中加入如下代码:

准备一个不同于主站的静态域名,可以用七牛的CDN域名,也可以自己新建一个域名,比如张戈博客使用的是res. zgboke.com,总之不能和主站共一个顶级域名.

最后在主题functions.php里面添加如下代码,将静态资源全部更换成这个域名:

②、网站带www的形式

这种情况下就简单多了,在 wp-config.php 中加入如下代码:

然后参考上述CDN更换函数的代码,将静态文件更换成其他二级域名即可。

Ps:怎么添加二级域名,这里就不赘述了,请自行研究。实在不会可以使用七牛的CDN域名。

精简插件

这个问题不用多说,用WordPress的都知道,插件多了就会拖慢速度!但是,张戈并不是要大家把插件都给删了,而是能省则省!明明可以用简单代码实现的功能,你硬是要用插件来解决就不好了。

比如,WordPress网站的sitemap.xml,明明分享了WordPress免插件生成完整站点地图(sitemap.xml)的php代码,完全就没必要装插件版。

又比如,禁止谷歌字体,明明还有非常简单的代码,偏偏有人就是喜欢用插件。。。

说了这么多,就是要告诉各位,你网站装的每一个插件,你是否去搜索过,是否有纯代码版本?是否有更好的替代方案?

好了,啰嗦了大半天了,最后再次总结一下张戈博客目前在用的主要优化方案:

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

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

发表评论

gravatar

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen:

刷新评论

目前评论:86   其中:访客  70   博主  16

  1. wuyifan 1 来自天朝的朋友 谷歌浏览器 Windows 10 新疆石河子市 电信

    我想说,为什么都是linux系统,可是我是win sever2012 ,有没有啥办法,我不会玩linux。

  2. 知宝堂|观常态 1 来自天朝的朋友 谷歌浏览器 Windows XP 云南省德宏州 电信

    学习了,收益匪浅。谢谢张老师

  3. 知宝堂|观常态 1 来自天朝的朋友 谷歌浏览器 Windows XP 云南省德宏州 电信

    签到成功!签到时间:下午2:57:23,每日签到,生活更精彩哦~

  4. 禅猫 3 来自天朝的朋友 谷歌浏览器  Android 4.4.4 MI PAD Build/KTU84P 江苏省徐州市 联通

    还有dns预拉取DNS Prefetching优化,ssl证书优化

  5. 拂晓 0 来自天朝的朋友 谷歌浏览器 Windows 7 湖南省湘潭市 联通

    嗯,写的挺好,一般来讲,这样的文章够新手看了

  6. Mr柒 0 来自天朝的朋友 谷歌浏览器 Windows 7 广西贺州市 电信

    张老师,我有个企业站经常内存消耗达80%以上,导致网站经常卡死,提示数据库连接错误,怎样才能解决这个问题?用的是阿里云ecs一核1GB内存,Linux系统。 :?:

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      企业站一般访问量不会太大,考虑是不是被人攻击。

  7. 简单生活 1 来自天朝的朋友 谷歌浏览器 Windows 7 中国 移动

    //指定cookies的域名为网站主域名
    define(‘COOKIE_DOMAIN’, ‘www.aabb.net’);
    这种带www就不需要启用其他顶级域名的二级了是吧,用 image.aabb.net就可以了吧? 张哥

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      是的

  8. 堆爱博客 3 来自天朝的朋友 QQ浏览器 Windows 10 湖南省 电信

    网站不带www 安装了七牛插件把cdn域名换成别的顶级域名还需要在functions.php文件添加那段替换代码吗

  9. 悟空 3 来自天朝的朋友 火狐浏览器 Windows 10 浙江省台州市 移动

    如果用的是鸟哥的BEGIN的话,那这个用来访问静态资源的域名是不是也要跟主题绑定?

  10. 悟空 3 来自天朝的朋友 火狐浏览器 Windows 10 浙江省台州市 移动

    看了一篇关于cookie-free domain的说明,上面说道Cookie 有两个重要的属性:domain 和 path。当浏览器访问一个网站时,只有 domain 和 path 都满足条件时,才会发送相应的 Cookie 到这个网站的服务器。那么在wp-config.php中加入指定cookies的域名为网站主域名那一行代码后,其实应该就能达到目的了。

    • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Mac OS X 10_11_3 广东省深圳市 电信

      如果首选域名和我博客一样是 zhangge.net,如果指定cookie path为 zhangge.net ,其他所有二级域名将全部带上cookies,你可以试试。也就是说网站使用顶级域名的时候,这个优化无效。

      • 悟空 3 来自天朝的朋友 火狐浏览器 Windows 10 浙江省台州市 移动

        嗯,貌似确实是这样子!
        然后你的中国博客联盟zgboke.com使用的也是祼域,博客站静态文件请求是用res.zgboke.com,这样子的话请求res.zgboke.com下的静态资源时不会带上zgboke.com传递过来的cookie吗?

        • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

          zgboke.com 那个站没有用到res.zgboke.com

  11. yszar 1 来自天朝的朋友 谷歌浏览器 Windows 7 甘肃省兰州市 电信

    博主,请问,用了以上这段代码,文章缩略图全部不显示了,url全变成以下形式了

    同是begin主题,cdn域名是image.xxxx.com,主域名是www的,怎样变成你博客缩略图的这种url

    • yszar 1 来自天朝的朋友 谷歌浏览器 Windows 7 甘肃省兰州市 电信

      好神奇,代码发不出来,剪裁缩略图的timhtumb.php的url也会变成image的,本来应该是www的

      • 张戈 [博主] 来自天朝的朋友 QQ浏览器 Windows 7 广东省广州市 电信

        随手写的,把包含timhtumb.php关键词的URL再替换回来即可,留言不留网址,谁知道你网站什么情况。

  12. yszar 1 来自天朝的朋友 谷歌浏览器 Windows 7 甘肃省兰州市 电信

    这样

  13. 在线看小说 2 来自天朝的朋友 火狐浏览器 Windows 7 北京市 联通

    最近网站速度越来越不行,逼得我做静态

  14. 筑楼 3 来自天朝的朋友 谷歌浏览器 Windows 7 河南省 移动

    我的天哪! 没想到1M 带宽都可以跑起来你的网站,太厉害了!看来以后还是在于优化,用有限的资源优化无限的可能啊!

加载中,请稍候...