细谈WordPress速度与性能的极致优化

这个大招我憋了很久了 之前一直在用主机 尽管我努力优化 也有了瓶颈 前不久找刺猬PY了一台 腾讯云的香港机器

你可以发现我的网站现在不到一秒就可以打开 而且是极少的数据库查询

下面这篇文章 我将详解我的每一项速度与性能的优化

前文先总结一下我用到的玩意 HTML、JS、CSS压缩 CSS递送优化 JS异步加载 DNS预读取 图片懒加载 数据库缓存 Memcache对象缓存 甚至连BBR都用上了

本文用到的特殊插件

WP Rocket:https://cdn.51shenyun.cn/wp-rocket3.3.3.zip

注!其余插件均可在后台安装插件处或者wordpress插件库中下载到

服务器及环境选择

服务器当然国内是最好的! 如果嫌备案麻烦 那就优先选择香港 线路越快越好

Linux的服务器 目前还有很多人用的是Windows系统 建议你换成Linux 另外建议Linux下的centos或debian

当然如果你是虚拟主机也可以往下看

PHP版本:7+ 建议使用7.3 因为它更了 新的Zend Opcache 如果你的主题或者插件兼容性不好 可以降降级

注!如果你是宝塔 请在PHP扩展安装opcache扩展

数据库:Mysql5.6

//为什么不是5.7?

因为它占用内存太多 不适用博客 当然你的服务器内存大于2G也可以考虑考虑!

建议:Memcached服务器扩展 (虚拟主机不适用)

安装教程:WordPress安装并开启Memcached缓存扩展加快网站速度

静态页面与缓存

要知道PHP是动态的 而动态就是 每次加载界面时 都需要“计算”一次 我们可以把它“弄成”静态的 缓存成文件的形式

推荐两个插件W3 Total CacheWP Rocket

在写这篇文章稿时 我使用的是W3 Total Cache(看我前面的预热文章)在我在次写这篇文章时我发现WP Rocket也很好用 甚至发现比w3tc还要快 而且对新手很友好

W3 Total Cache它是全英文的 没有汉化 所以呢 我做了个汉化包 重新编写的W3 Total Cache中文汉化语言包

这里以WP Rocket为例

注意!!WP Rocket是收费插件 有能力可以支持一下正版

我这里准备了个开心版 当然也是最新的 下载链接在上面

开启插件后 会要求你安装或更换advanced-cache插 允许即可

安装后默认开启缓存 而且它没有过多复杂的设置

你先可以手动设置一下 下面挑几个需要注意的说

文件优化 如果你想完全使用我博客的教程 那就先全部不选 下面会详细说

预缓存-DNS预读取

把你需要预读取的URL填入进去

//我怎么添加?

你可以在进入你的网站 前在浏览器按下F12会出现开发者控制台

在里面找 除你网站的URL

如 新浪图床的 //tva3.sinaimg.cn

百度站长自动提交的 //sp0.baidu.com //www.baidu.com

数据库查询缓存

1、宝塔面板

如果你是宝塔面板它会自动开启 当然你也可以调节

软件管理-运行环境-MYSQL-配置修改 手动调节 query_cache_size与query_cache_type

或在 软件管理-运行环境-MYSQL-性能调整 进行自动调节

可在 软件管理-运行环境-MYSQL-当前状态 查看缓存命中率

2、手动编译安装

登陆mysql控制台

查询缓存情况

mysql> show variables like '%query_cache%'; 
+------------------------------+----------+ 
| Variable_name   | Value    |
+------------------------------+----------+ 
| have_query_cache | YES | 
| query_cache_limit | 1048576 | 
| query_cache_min_res_unit | 4096 | 
| query_cache_size | 16777216 | 
| query_cache_type | OFF | 
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+ 
6 rows in set 

如果query_cache_wlock_invalidate不是ON,修改配置文件以开启查询缓存:

> vi /etc/my.cnf

[mysqld]中添加:

query_cache_size = 20M
query_cache_type = ON

重启mysql服务:

> service mysql restart

数据库优化

这里建议将所有表 转换为InnoDB 

插件推荐:WP-Optimize

它一款非常不错的数据库清理以及优化工具,他不仅可以清楚综上所述所有的臃肿数据,还能够在清理之后优化数据库

在这个插件中 你可以一键删除无用表

并且 可以定期自动维护

Database-数据库 删除无关联的数据库 可以删除你之前卸载的插件 但数据库还在的表

网页整页逻辑优化

我们要知道 如果 在不必要的地方渲染网页的资源 是很浪费时间的

所以我们 要有逻辑的让它渲染 该渲染啥时渲染啥 尽量不让它发生拥堵

这里使用的插件是Autoptimize+WP Rocket

Autoptimize

它可以压缩聚合html CSS JS 用以减少URL查询次数 减少CSS JS 小图片的获取次数 大大的加快网页整体速度

主页 选项卡

点击右上角显示高级设置 然后勾选以下选项

优化HTML

优化JavaScript

    Aggregate JS-files(聚合JS)

    聚合内联JS

    添加捕捉异常包装

开启JS优化后 如果网页出现错误 请直接关闭Aggregate JS-files说明它不适合你的主题 或者手动 添加出现错误的JS

优化CSS

    Aggregate CSS-files(聚合CSS)

    聚合内联CSS

    生成数据:图片URI

    内联和推迟CSS

注!如果出现小图标 错位 或者不显示 请关闭Aggregate CSS-files

杂项都选上

额外 选项卡

删除谷歌字体

移除emoji(注 如果这里选了 那么在wp Rocket就不用选了)

从静态资源中删除查询字符串

WP Rocket设置

文件优化 选项卡

    CSS递送优化

    JavaScript异步加载

        jQuery的安全模式

注!如果你在Autoptimize中聚合JS或CSS未选中 那么这里递送优化和异步加载也不用选了

图片压缩以及图库

压缩后的图片在配合图床的使用能大大加快你的网站加载速度,而且还不浪费服务器资源,搬站的时候也方便!

请转移到这篇文章腾讯智图与图床配合使用——优化网站图片资源

如果你懒的手动压缩 且把图片存在你的服务器中 你可以使用Imagify插件

这个插件每个月赠送25M使用量,小站完全够用

图片懒加载

通常来说,一个正常web页面是由图片和文字以及各种CSS,JS构成,而这其中,拖慢网速的罪魁祸首就是图片。懒加载即将页面中的图片分布加载,边浏览边加载,从而减轻服务器压力以及减轻流量的浪费。

这里有两种选择 你可以使用设置更详细的BJ Lazy Load插件 WordPress使用图片懒加载加快页面打开速度——BJ Lazy Load

也可以使用WP Rocket中内置的功能

对象缓存(更高级的静态页面)

敲黑板!! 重点来了

Mencached它是将动态页面缓存到内存中 以达到高速写入读取 它可以使数据库查询降到个位数 页面秒开!

它会将你已缓存的静态页面文件再缓存到内存中 以达到高速读取

对象缓存我这里使用的是Memcached具体看这篇文章 WordPress安装并开启Memcached缓存扩展加快网站速度

插件使用的是WPJAM BASIC

它拥有众多实用功能集合的插件  并提供Memcached缓存 当服务器开启Memcached扩展后 配合它用 效果最好了!

安装后 将插件里面的object-cache.php移动到wp-content文件夹

如果你使用的是 我上篇文章中所使用的文件 就不用移动了

安装后 即自动开启Memcached缓存

可在WPJAM BASIC的系统信息中 查看各项命中率

杂项优化

WordPress主题

选择一个优质的主题 会大大加快 你的网站 乃至提升SEO

如果你喜欢我的主题 可以到这里下载 我把它优化了一番 修复了成吨BUG并优化了SEO

WordPress自适应极简双栏主题Kunkka修复优化版

关闭掉WordPress不必要的功能

关闭不必要的功能 可以提高WordPress运行效率

你可以在WPJAM BASIC中的优化设置Rewrite中 进行相关设置

博主这里 没写什么文章 就写了个 WordPress缓存侧边栏减少数据库查询

wp-config.php相关设置

wp-config.php是整个wordpress的配置文件 我们可以通过官方给的文档进行部分有效的设置

以用来 增加它运行效率 减少数据库查询次数

修改网站根目录下wp-config.php的配置

编辑文件 在后面添加如下代码  将主题目录名 域名 换成你自己的

//通过剔除对模板路径和样式表路径的数据库查询,这样可提高站点的性能。
define('TEMPLATEPATH', '/wp-content/themes/kunkka');
define('STYLESHEETPATH', '/wp-content/themes/kunkka');
//设置地址而不是服务器检查,这将减少服务器查询
define('COOKIE_DOMAIN', 'https://51shenyun.cn');
define('WP_HOME', 'https://51shenyun.cn');
define('WP_SITEURL', 'https://51shenyun.cn');
//更新时跳过wp-content目录,增加更新效率
define('CORE_UPGRADE_SKIP_NEW_BUNDLED', true );

开启BBR

!!没必要 没必要 完全没必要! 除非像我一样 没事闲的 强迫症特严重的

它是谷歌开发的 用来优化TCP堵塞的 可以加快传输效率 减少丢包率

不过。。。。像网站这样的小文件传输 几乎用不上 除非你在网站上有个大文件需要下载 但是有强迫症的我 还是装了一下 不过也无妨 没啥副作用

服务器要求 非openvz架构

使用BBR脚本 Linux网络优化加速一键脚本——BBR/锐速加速脚本

安装原版BBR不要安装 魔改BBR BBRPLUS锐速 否则会出现断流

其他提示

  • 插件过多会增加数据库查询次数 当然还是要看你的插件功能 譬如WP-Zan WP-PostViews这两个插件 它会增加数据库查询次数 你可以适当割舍
  • 有同种功能的插件 不要重复开启 否则会产生冲突 影响性能
  • 减少URL申请次数 能预加载就预加载 譬如统计代码 你可以使用DNS预加载
  • 将图片超链接或引入其他站的图片本地化会更好 譬如我网站下方的 加入QQ群的图片超链接 你可以将它本地化以减少URL申请次数
本文原创 转载请标明链接
评论 ( 4)
  1. 沙发
    秋硕 2019-07-10 02:26

    拜读。好文章。WP Rocket压缩包提示损坏。请博主查看一下。谢谢。

  2. 板凳
    奶爸de笔记 2019-06-02 18:16

    装上后评分比W3高了一点点,细微的一点点,不过这个插件到时候更新怎么办?W3的设置确实太复杂了。

  3. 地板
    奶爸de笔记 2019-06-02 17:55

    写死主题函数的话进后台有两个php错误,虽然不影响使用,不用插件也看不出来会报错,但是强迫症,我还是没写死。我去试试你这个特别版插件。