WordPress 刚刚安装的时候,性能是没问题的,我们安装了主题、插件、添加了一些小工具和菜单,然后我们就开始上传内容了,我们都很勤快
Waiting (TTFB) 时间
Time to First Byte 指的是浏览器开始收到服务器响应数据的时间(后台处理时间+重定向时间),是反映服务端响应速度的重要指标。
TTFB 时间多长算长
下面两个图中的 TTFB 时间分别是本站所在服务器的静态和动态网页 TTFB 等待时间。
根据测试,TTFB 时间如果超过了 500 ms,用户在打开网页的时候就会感觉到明显的等待。把 500 ms 以上认为是 TTFB 时间过长。
TTFB 过长的原因
- 服务器收到用户打开一个页面的请求时,首先要从数据库中读取该页面需要的数据,然后把这些数据传入到模版中,模版渲染后,再返回给用户。由于查询数据和渲染模版需要需要一定的时间,在这个过程没有完成之前,浏览器就一致处于等待接收服务器响应的状态。有些服务的性能比较低,或者优化没做好。
- 如果服务器到用户之间的网络不好,(比如,服务器在欧洲,用户在中国,用户打开网页的时候,请求需要跨越千山万水才能达到服务器),服务器接收到用户请求的时间过长。
- 页面在用户的浏览器中保存了过多的 Cookie,每次请求,这些 Cookie 都要发送到服务器,服务器都要处理这些 Cookie。
Waiting (TTFB) 时间过长的解决办法
- 缩短服务器响应时间:使用缓存,把 PHP 和 MySQL 的执行时间最小化。
- 如果是网络原因,换服务器是比较直接。或者使用CDN服务。
- 如果是 Cookie 的原因,可以通过修改应用程序,删除或精简Cookie内容,缩短有效期等。
本站使用的是 Cachify 插件 Memcached 缓存方式,直接把用户请求过的页面,缓存到了内存中,网站加载 Waiting (TTFB) 时间达到了 50 ms 左右,感兴趣的朋友可以用谷歌浏览器的调试工具查看一下。
Cachify 缓存插件描述
Cachify 通过将文章,页面和存档页面缓存为静态内容来优化页面加载。我们可以根据需要选择把静态内容缓存到 WordPress 数据库,硬盘,APC(PHP 缓存)或者 Memcached 中。用户再次访问页面时,直接从缓存中读取页面给用户,不用再查询数据库了。都知道,应用程序的性能瓶颈在数据库,我们把数据库查询降低到了 0,你说速度快不快?Cachify 插件只会缓存用户访问过的页面,长时间没有用户再次访问的页面,Cachify 会从缓存中把这个页面清除掉,确保缓存高效。
Cachify 缓存插件的特性
- 适用于自定义文章类型。
- 缓存方法:DB,HDD,APC 和 Memcached。
- 通过 WordPress 工具栏中的 “刷新缓存” 按钮删除缓存。
- 支持 WordPress 多站点。
- 可以选择压缩 HTML 或 JavaScript。
- 可以为用户浏览器和文章设置不缓存。
- 手动和自动删除缓存。
- 自动缓存管理。
- 可以查看缓存状态的仪表板小部件。
- Apache 和 Nginx 服务器的设置。
- 通过钩子/过滤器扩展插件。
配合 Nginx 使用 Memcached 缓存 WordPress 页面
虽然 Cachify 也可以把页面缓存到数据库和硬盘中,但是我们不屑使用这些折衷的方式,毕竟服务器上除了 CPU,速度最快的就是内存,我们要的就是快、快、快。首先服务器使用的是 Nginx,然后服务器上安装了 Memcached 服务,确保这两个条件满足之后,安装并启用 Cacify 插件,在站点的 Nginx 配置文件中添加以下配置,重启 Nginx,
关于配置这里注意报错:
nginx: [emerg] "location" 指令在 /www/server/nginx/conf/nginx.conf:102 中是不允许的
nginx:配置文件/www/server/nginx/conf/nginx.conf 测试失败
"location"指令应该在'server'指令中,例如
server {listen 8765;location / {resolver 8.8.8.8;proxy_pass http://$http_host$uri$is_args$args;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;##在server内 粘贴进来}
}
然后在 WordPress 仪表盘的 Cachify 设置中,选择缓存方式为 Memcached,如下图,设置缓存时间,和缓存生成的时机(对登录用户不缓存、用户发表评论时清理缓存)。
然后退出后台,在前台刷新几下页面试试。不用看详细的参数,我们就可以发现,页面打开一次后,再次打开这个页面的速度刷刷的。有些朋友可能说是这浏览器缓存的问题,好,那我们打开调试模式,清理掉缓存再试试,看看具体的参数,快了多少相信是很明显的。
有朋友可能会有个疑问,如果都把内容缓存到了内存里面,内存会不会被撑爆?大家可以想象一下,内存里面缓存的其实都是页面的代码(不包括图片、视频这些多媒体),一个页面的代码能有多大?撑死 1M,1G 的内容能够缓存多少页面、大家可以计算一下。如果你的服务器的内存实在太小(比如128M),我只有劝你增加服务器内存了,毕竟,咱们做互联网的,再穷不能穷网站。
周广航SEO博客 :WordPress网站加载WAITING (TTFB) 时间过长解决办法