说起 WordPress 优化来算是一个老生常谈的话题了,最近明月从折腾 CDN 转移到折腾 WordPress 优化加速,只能说是国内 CDN 服务水平真是岑差不齐,适合像明月这样的草根苦逼博客使用的寥寥无几,好不容易碰到了“全速云 CDN ”还因为价格过高暂时只能放弃(等明月成“土豪”的时候我再考虑吧!能成“土豪”吗?不能吗?能吗?)。
最后只能是转回身来继续“蹂躏” WordPress 了,目前来看,经过这近半个月的折腾初见成效了无论是大流量的主站【玉满斋】还是廉价虚拟主机的博客速度都有了明显的提升,稳定性目前明月自己完全可以接受。今天明月就结合前人们(或者应该叫前辈大咖们)的 WordPress 优化做一个优化思路上的总结吧!
很喜欢这个图片,跟我的文章主题真是太贴切了!
为什么说是“思路”而不是具体的技术教程呢?其实很简单,只有思路清晰了才可以有的放矢具体操作嘛!以前明月也是有一个很大的误区,那就是博客网站的运行速度=服务器主机的硬件配置,自从开始折腾 CDN 起,这个观点就一直在动摇直至现在几乎已经是荡然无存和嗤之以鼻了!为什么?下面从我整理的几点WordPress 优化思路大家应该可以窥探一二。
一、服务器主机配置对访问速度有多大的决定性?
很多站长应该都面临过选择博客网站主机服务器配置时的纠结,明月其实刚开始时也有这样的经历,本来我对服务器了解就是朦朦胧胧的,但一个基本点我是清除的,那就是服务器和我们用的个人电脑(无论是台式机还是笔记本甚至平板)其实是完全不一样的,虽然都能称之为是电脑,但其运行侧重点是不同的。服务器的CPU/内存/硬盘/主板/机箱都有很大的区别,简单点儿理解就是:
服务器相当于普通士兵,讲究协同作战,崇尚人多力量大的真理,一个不行来十个,十个不行上一百个。但是都听命令行事,指哪打哪。
家用相当于特种兵,干什么都行,综合素质高,精通各种暗杀,潜入技能。做起事来杠杠的,但是双拳难敌四手,任务一复杂,就搞不定了。
所以,服务器配置决定的应该更多是“并发”类的运算能力,处理数据是看同时可以处理多少任务量。理解了这点儿其实就够了。
说会我们的主题,影响网站访问速度对服务器来说就是看同一个时间段有多少并发的http请求量需要服务器来运算处理,网站前端可以理解成同时有多少客户端访问请求。如果你的博客网站一分钟内的在线访问人数是5个,那么服务器就是处理5个并发的运算请求。好吧,一分钟内都会有5个访问者,一小时是300个,恭喜你呀,网站一上线日IP都上千了,牛逼呀!这种事儿会发生吗?会,但照明月的经验看,最起码是博客网站坚持每天更新三年以后才会有这样的访问量,新站没有很强大的引流方案,这是不可能的。(百度统计里面的“实时访客”就可以观察你网站试试在线人数,谈不上准确,但基本上还是可以参考的),下面上个百度统计里的实时访客统计截图:
这是我主站凌晨02:54分的实时在线人数
这是我博客凌晨02:55分的实时在线人数
博客的是不是很惨,这个0估计要保持到明天早上才会有变化了!囧!
说了这么多其实明月就是想告诉大家主机服务器配置对访问速度的影响几乎是微乎其微的,日IP在500一下的时候,对100多元的虚拟主机配置都没有任何压力,估计也就是日1000IP的时候才是考验配置的时候,所以动辄就上ECS主机的在我眼里就是“土豪”,有钱人呀!
综上所述,主机服务器配置对博客网站访问速度的影响很小,只有访问量大的时候才是考验服务器配置的时候,无访问量或者访问量低于日IP1000以内的都不是配置低的因素。
二、WordPress 很慢吗?
WordPress 很慢,这是很多人都在说的,我记得此论调也就是这几年才流行开的,据说是因为一个台湾的 WordPress 大咖在自己博客上宣称“因为 WordPress 性能太差放弃使用”类似的言论后才流行开的,于是乎 WordPress 很慢就成了指责 WordPress 的有力理论依据了。
关于技术层面的东西,明月说不好(其实是真不懂!),我多年来也只是使用 WordPress 来建站从来没有想过更换,就我那点儿早年间C/C++、PHP基础,我能理解 WordPress 代码方面有多优质(再次膜拜一下Matt·Mullenweg大神,19岁时不是学编程专业的情况下开发出了 WordPress !跪了!具体大家可参考【WordPress代码质量怎么样?】一文),所以我从来不相信“ WordPress 很慢”这一说,目前国内使用 WordPress 很慢的主要原因其实就是因为“墙”的存在, WordPress 自身会调用很多“库”,而这些“库”大部分都是“墙”外的,这本身就拖慢了运行速度,很多站长都知道使用 WordPress 后要关闭对 Google 字体的调用,虽然新版 WordPress 已经去掉 Google 字体了,但还有不少调用是需要“墙”外的http请求的,当然这些请求目前国内已经有很多第三方提供的来使用了,所以这个影响现在几乎是微乎其微了,当然前提是你得会替换这些http请求,这点而我们以后再去探讨。
WordPress 值得让人膜拜的最主要原因就是“兼容性”和“可扩展性”这两点, WordPress 插件、主题最丰富这是目前全球任何一个网站系统都不得不承认的现实, WordPress 能占有全球互联网 38% 的份额绝对不是吹出来的,这两点我感觉是很重要的。兼容和扩展其实是把双刃剑,因为你没法要求所有的开发者的水平都像 Matt·Mullenweg 那样的神乎其神,这就类似苹果手机运行就是比Android手机快是一个道理,苹果最大的敌人是封闭,Android最大的敌人是开放。 WordPress 慢其实很大一部分原因就是插件甚至主题造成的,这点也从明月最近帮人优化网站得到了证实。
当然,还得提一下攻击、后门、木马、黑链植入等等这些“黑客”手段对 WordPress 运行的影响,这些其实大部分也是使用了不干净的、破解版插件和主题引狼入室的,所以我在【博客站长务必要养成的好习惯】一文里专门强调了插件使用也是一个需要养成的。
综上所述“ WordPress 很慢”其实也不是影响网站访问速度的罪魁祸首。
三、影响访问速度的有哪些?
很多博主都会感觉WordPress很慢?作为全世界最常用的建站和博客系统WordPress来说,在性能设计上肯定不会有太大的问题,WordPress开发团队也肯定也考虑到这个问题。
那么WordPress效率问题主要是出在哪里呢?
根据我多年WordPress建站和维护的经验,很多性能的问题都是WordPress使用不当造成的,下面明月就说说有哪些使用不当是影响访问速度的。
外链引用
你博客网站内引用外链过多,有时候是访问慢的主要罪魁祸首(外链就是http前缀域名非博客主域名的链接),至于说为啥有这些外链?原因有很多,比如:文章内的外链图片、插件内的外链http请求、主题代码里的外链请求等等。特别是文章内的外链图片,因为并不单单只在载入文章的时候影响文章的载入,首页、分类页的缩略图裁剪也要调用外链图片来裁剪,只要是显示缩略图的地方外链图片都会被调用多次。插件和主题内的外链一般影响比较大的是 WordPress 后台载入速度,对前端影响主要就看插件或者主题作者的开发水平和思路了。
插件影响
其实插件对访问速度的影响有时候并不单单是表现在前端,而是服务器端或者说是数据库服务器端,有些插件会产生大量的数据库查询读取次数比如著名的 WordPress “安全卫士”插件 Wordfence Security 就会对数据库进行大量的操作,其它的还有很多类似的插件都有这样的问题,比如:SEO类插件等等。所以在决定使用一个插件的时候,最好是启用插件后看看数据库里是不是多出了非 WordPress 系统WP开头的“表”,如果有就尽量不要使用,或者使用完后就停用插件,需要使用的时候再开启。
类似图片的静态文件过多的影响
图片现在几乎是博客文章里不可缺少的了,图文并茂的文章可以受到用户和搜索引擎的青睐是大家都知道的,那么图片多了后依然会影响访问速度,因为这等于说变相的加重了主机服务器硬盘的读写操作,每一个访问都会有读写操作的请求诞生,加上相应的CSS/JS这类起到美化炫酷的代码对服务器其实也是个不小的压力。
数据库服务器瓶颈影响
大家不要忽略了数据库性能瓶颈带来的影响,特别是博客文章数量或者是插件数量多了以后,数据库要承受很大的压力的,插件对wp_options表、博客文章对wp_post表的查询量是惊人的,主机宕机就两个因素,一个是主机负载过高,一个是数据库服务器锁死。
四、优化 WordPress 的明确方向
通过上述三点的分析,那么我就可以明确了 WordPress 优化的方向,主要就集中在“动静态分离”、“服务器端优化”、“ WordPress 缓存优化”、“ WordPress 程序优化”这四个方面来操作了,下面明月引用“我爱水煮鱼”大神的 WordPress 性能优化经验和技巧来说明为什么这四个方面(明月会在每一条下面做一些个人建议):
动静态分离
不管 WordPress 博客还是其他 CMS 建的站点,优化的第一步一定是动静态分离,这也是你看到新浪,腾讯等门户,他们图片的域名和网站的域名不是同一个的原因。
网站的静态文件一般有两种:第一种是网站的 CSS , JS 和一些主题的常用背景图片和按钮文件,这些图片如果网站不进行改版或者其他改动,基本上是不会修改的,第二种是每天更新的网站内容中上传的图片或者附件,这些图片文件也是基本不会改动的。
解决好静态文件存储和加速,网站性能就首先能得到基本的保证了, WordPress 构建的网站和博客也是一样的。对于这些静态文件来说,最好的解决方案永远是使用 CDN 网络进行加速,这样服务器的压力将大大降低,因为访问页面只有当前页面是在自己的服务器上,其他所有图片, JS 和 CSS 都是从 CDN 获取的。
注:这里明月要强调的是“动静分离”目前解决最好的就是七牛云了,所以这里明月强烈推荐七牛云,每月免费 10G 的流量和空间,绝对够我们大部分草根博客免费使用很久了。
另附上本博有关七牛云的几篇文章供大家参考学习:
利用七牛云存储缓存Gravatar头像加速 WordPress
服务器优化
优化好静态文件之后,就要开始对网站的动态内容进行优化,优化动态内容,首先要有一个稳定网络环境,稳定的主机供应商和服务器性能的优化。
选择一个靠谱的主机托管商,个人推荐 BGP 或者多线机房,让全国用户访问都能有不错的速度,然后尽量选择独立的服务器,再不济,也得VPS,?因为你没有服务器的 Root 权限很多东西是无法进行的。
服务器问题解决之后,服务器可以做如下优化:
MySQL 设置 MySQL Query Cache ,可以保存保存查询结果,同样的查询不再从数据库检索,对速度有很大的提升。
PHP 开启 OPCache :把经过编译后的 PHP 代码缓存到共享内存中,并在用户访问的时候直接调用从而起到高效的加速作用。
安装 Memcached 和 PHPMemcached 扩展:使用 Memcached 来缓存 WordPress 数据。
注:关于“服务器优化”这需要一定的 Linux 基础才能自己操刀的,没有相关技术的可以请求主机管理员帮忙,一般情况下主机服务器都默认已经开启上述的优化了,我们最多可以向管理员求证和落实一下,这也是判断你的主机提供商专业不专业的时候。
WordPress 缓存
要彻底明白和搞懂 WordPress 性能优化,首先要理解 WordPress 缓存机制, WordPress 默认是一种叫做 WordPress Object Cache 的对象缓存机制,它是把需要缓存的内容按照 Key-Value 这样的模式进行缓存(和 No-SQL 的 key-value 的有点类似),当然它还支持按照 Group 来划分和避免缓存的内容冲突。
所以最基础的 WordPress 缓存插件就是,把 WordPress 产生的 Key-Value 存起来,如果是使用 Memcached ,就是存到内存,如果使用 Flie 就是存到硬盘中,当然高级的 WordPress 插件还能做更多,比如 WP-Rocket 把整个页面缓存到硬盘中,下次直接访问静态的 HTML 文件,让服务器直接绕过 PHP ,节约 CPU 时间。 Batcache 会把整个页面当做一个对象存到内存里面。我个人推荐使用 Memcached 和 Batcache 进行缓存。
对于已登陆的用户,Memcached 会把 WordPress 的对象存到内存里面,服务器的内存足够大,读取和存储速度也够快,并且内存缓存命中率也大于 97% 。另外我们 WordPress 程序经过优化之后,每个页面的查询一般在2条左右,所以整个网站效率很高,首页甚至做到 0SQL ,页面生成只需要 0.0013 秒。
对于未登录的用户,Batcache 会把整个页面当做一个对象存到内存里面,未登录用户访问的时候,整个页面从内存中取出,速度奇快。
注:同上一条一样,这里的 WordPress 缓存主要是针对服务器层面配置来优化的,一般主机商那边默认都已经配置好了,具体详情只能是问你的主机商来核实了。只有 WordPress 的缓存插件是需要我们来安装配置的,这里明月推荐WP Super Cache 、W3 Total Cache 、 WP-Rocket 这三个 WordPress 缓存插件,明月目前使用的是 WP-Rocket ,具体大家可以参考【推荐一个 WordPress 本地缓存的神器: WP-Rocket 插件】来了解。
WordPress 程序优化
WordPress 程序优化是基于 WordPress Object Cache 的机制对 WordPress 插件和主题进行优化,主要经验有以下几点:
只使用必须的 WordPress 插件,安装太多的 WordPress 插件很容易引起性能问题。
从正规站点下载 WordPress 主题,这样下载的主题才能保证质量和安全。
WordPress 主题和插件尽量使用模板函数,因为 WordPress 模板函数如果可能都已经做好了 WordPress Object Cache。
比如 get_the_terms 和 wp_get_object_terms 这两个函数,功能基本一样,但是 get_the_terms 直接从对象缓存中取数据,无查询,而 wp_get_object_terms 每次都从数据库中取数据。
WordPress 插件和主题如果一定要直接查询数据库,请做好 ObjectCache,将查询的结果使用w p_cache_set 存到 ObjectCache 中,下次直接使用 wp_cache_get 获取。
注:本条可以理解为是一个专业级的技术探讨了,当然也请一定要记住养成使用插件和主题的好习惯哦!懂技术的应该可以理解,小白可以忽略直接给明月点赞回评支持了!谢谢您的阅读支持!
好了,没有想到仅仅是个总结性的文章我竟然啰嗦了这么多,6000多字!我自己都惊呆了,看来还是有点儿啰嗦了,以后得精简文字“啰嗦”的毛病呀!希望此文可以帮助到大家,特别是小白站长们,看完此文后有收获就是明月最大的欣慰了!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。