不知道各位有没有好奇过,为啥自己网站加载很慢。而通过F12
发现,ssl
加载速度正常,网页下载速度正常,唯独一个TTFB
时间超级长,甚至高达一秒以上。通俗点说,TTFB
就是你服务器生成当前页面所需要的时间。很明显,如果想要加快TTFB
时间,就需要针对服务器进行一系列优化。今天,我们就以WordPress
为例,告诉你到底如何优化服务器,可以极大程度的缩小TTFB
时间。
TTFB是发出页面请求到接收到应答数据第一个字节所花费的毫秒数
我们知道WordPress
是由php
查询数据库而动态生成的页面,即动态页面。然后包含一些html
、css
、js
、图片等各种资源的加载过程。如果你想缩短这个TTFB
时间,那么就需要缩短php
解析时间、缩短数据库查询时间。html
页面优化,这个很明显,如果你的页面没那么大,那页面生成时间会很快。
这里顺便说下,浏览器加载网页的整个过程:
DNS
查找服务器地址-https
证书验证-服务器解析网页-浏览器下载网页-浏览器下载网页内各项资源。
事实上,TTFB
时间还跟服务器资源有一定关系,比如服务器访问量过大,那么就有可能造成请求被堵塞,这个又需要另一种服务器优化方式来解决。
下面,我们开始分别讨论如何解决TTFB
时间过长的问题(本文仅提供思路,以及个别已经写好的教程):
加快PHP解析过程
这一步你只需要在PHP
里添加Opcache
扩展即可,它会自动缓存你的php
解析结果。如此,用户每次访问网页,有些内容就不需要每次都实时解析,而是直接利用opcache
获取php
的解析结果缓存。安装也很简单,直接宝塔后台搜索安装即可,无需任何设置。如果你没用宝塔,那就自己去找找怎么开启的方法吧。
数据库查询缓存
如果用户每次访问你的网站,php
都要从数据库里查询字符,有些页面甚至高达200
次查询。那么这个速度确实会受到影响,而且数据库进程占用系统资源也会很高。一般,可以通过redis
或者memcached
来达到缓存数据库查询的结果。我这里比较推荐memcached
,相关教程可以点击链接访问:WordPress使用Memcached缓存数据库查询结果。
到此,基本上动态页面生成的时间已经有所缩短。如果你的WordPress
网站经过这两个步骤,还是很慢,你就要考虑是不是主题或者某个插件的问题导致了。
页面优化整合
这一步,你需要下载一个插件,可以整合页面内CSS
、JS
、html
资源的插件,比如autoptimize
(国内服务器用这个插件,它的设置页面会有点慢,因为它要链接它的订阅服务,设置界面内右侧的类似广告性质的东西,可以通过修改php文件,加快速度),或者其他类似插件。
当然,其实这一步作用还是挺大的,它可以压缩CSS
、JS
、html
,并且整合碎片资源文件。
动静分离
这一步,主要是把图片放在云存储或者其他地方,防止过多请求服务器,毕竟都是小宽带,经不起这么消耗的。我这里用的是又拍云,相关插件使用的是:WPUpYun
(又拍云云存储插件),加入又拍云联盟,每年都会送点流量的,小站足够你用了。
静态页面缓存
这一步就是锦上添花了,使用WP Super Cache
等缓存插件,可以把动态页面直接缓存成静态页面。相当于,把WordPress
网站转换为html
静态页面,体验会更上一层楼。这里,具体的,可以参考我之前写的教程:WP Super Cache缓存插件详细设置教程。WP Super Cache
里有个开启预压缩的设置,记得开启,那个就是gzip
压缩。如果你不想使用这个插件,也要记得自己开通gzip
压缩功能。
基本上WordPress
层面,能做的就这么多了。下面再介绍点容易被忽略的加速手段吧
服务器开启BBR,防止请求阻塞
这是Google
开发的算法,用于解决服务器短时间内的请求阻塞问题,可以理解为它可以减小服务器的丢包率。而这个BBR
在Linux
系统内核4.9
以上会自带,但是需要你去开启以下,基本的开启代码如下:
lsmod | grep bbr
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
如此,就开启完成了,可以通过以下命令验证是否开启成功:
lsmod | grep bbr
如果得到的结果包含bbr
,那么就可以了。如果还是不懂,可以参考我之前写的两篇教程:Centos 8.2升级系统5.9内核及bbr的开启 以及Centos7新版内核安装bbr教程。
终极优化
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/1609.html
评论列表(10条)
前些天刚和古哥聊过这个问题,没想到古哥就写出来了,特赞。
其实我也有点小想法,应该还可以加入cnd来加速不同地域的反应速度。
从autoptimize排除脚本哪儿,古哥能复制发出来一下嘛。
@太耀:每个人这里都不太一样,有些插件不能合并js,所以要排除。还有一些是针对管理员后台的css也要排除(前端顶部管理员工具条那个)。我的内容如下:
js:wp-includes/js/dist/, wp-includes/js/tinymce/, js/jquery/jquery.js, wp-content/plugins/enlighter/cache/, js/jquery/jquery.min.js
css:wp-content/cache/, wp-content/uploads/, admin-bar.min.css, dashicons.min.css
@古哥:古哥,justnews主题的话,可以直接抄吗?
@太耀:可以的
挺好
@30 ℃:多谢大佬
全面,给古哥点赞。不过我就是懒得折腾 ==、
关于这个如何操作,我将在以后的日子里,专门给各位介绍下。下图中的304即表示直接从本地获取的网页数据。
5元已付 请问什么时候更新
@漫夜:网站好久没更新了,我看下周更新一下吧。
白嫖怪来了。怎么能少了我。这个付费值得吗,有没能白嫖的。直接在下方评论告诉我。我在这里由衷感谢大家了!