网站加载过程中Waiting(TTFB)时间过长的解决过程

投稿   蝈蝈要安静  2017-12-15 07:35:49  327 人阅读  42 条评论

最近发现博客访问速度变慢了,查看了下控制台发现所有静态资源的加载都保持在200ms以内,只有第一项 document 的时间达到了6.65s,点开一看原来是一个名为 Waiting(TTFB) 的东西占据着主要的加载时间。具体控制台的显示内容如下:

网站加载过程中Waiting(TTFB)时间过长的解决过程 建站经验 第1张

那么 Waiting(TTFB) 是什么呢?

TTFB 全称 Time To First Byte,是指网络请求被发起到从服务器接收到第一个字节的这段时间,它包含了 TCP 连接时间、发送 HTTP 请求时间和获得响应消息第一个字节的时间。

网站加载过程中Waiting(TTFB)时间过长的解决过程 建站经验 第2张

如果不是服务器的的问题,那基本上可以确定是我这几天折腾博客造成的结果。由于最近几天测试了不少插件、添加了不少功能代码,具体是什么原因导致博客加载变慢我也不知道,没办法只能从头开始测试。

  • 停用所有插件,启用默认主题。速度上去了,说明是主题或者插件的原因;
  • 启用默认主题,逐一测试插件,速度基本不变,说明插件没有问题;
  • 停用所有插件,启用 DUX 主题,速度慢下来了,说明主题有问题?
  • 备份主题,后台删除 DUX 重新安装主题,速度上去了,说明原版 DUX 主题没问题,我自己折腾的东西有问题。

接下来就重点分析我所折腾的东西。JS、CSS、图片等静态文件我都是使用的七牛云镜像存储,查看控制台也没有什么异常,对于主题的个性化修改也就只剩下 functions.php 这个文件了。恢复之前自己折腾的主题文件备份,然后替换原版主题的 functions.php 文件,网站速度上去了,这也进一步说明了网站加载过程中 Waiting(TTFB) 时间过长就是这个文件造成的。

我分别将添加的功能函数一个个重新添加并检测网站页面访问速度,具体历程就不详述了,最后终于发现原来是下面这段代码搞得鬼:

  1. //网站链接自动转换为英文
  2. function qgg_translate_cn_post_title_to_en( $title ) {
  3.     $translation_render = 'http://fanyi.baidu.com/v2transapi?from=zh&to=en&transtype=realtime&simple_means_flag=3&query='.$title;
  4.     $wp_http_get = wp_safe_remote_get( $translation_render );
  5.   if ( emptyempty$wp_http_get->errors ) ) {
  6.       if ( ! emptyempty$wp_http_get['body'] ) ) {
  7.           $trans_result = json_decode( $wp_http_get['body'], true );
  8.           $trans_title = $trans_result['trans_result']['data'][0]['dst'];
  9.           return $trans_title;
  10.         }
  11.     }
  12.     return $title;
  13. }
  14. add_filter( 'sanitize_title', 'qgg_translate_cn_post_title_to_en', 1 );

这段代码是我为了方便在编辑文章时通过百度翻译将文章别名自动翻译成英文添加的,简单地看了下,代码方面应该是没有什么大问题,主要应该是网站加载时需要请求百度翻译导致加载变慢,移除这段代码后再次刷新网站页面,一切正常!查看控制台如下所示:

网站加载过程中Waiting(TTFB)时间过长的解决过程 建站经验 第3张

虽然网页加载还不是特别快,但是也算是维持在了2s以内了,问题得到解决。

历史上的今天:

文章标签: ,   ,  
原文地址:http://blog.quietguoguo.com/record-the-long-ttfb-time-solution-during-the-loading-of-the-web-site/
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 蝈蝈要安静 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!

 发表评论


  1. 亚克力浴缸
    亚克力浴缸 @回复

    没看懂,网站加载时间不跟服务器关系吗

    • 懿古今
      懿古今【村长】2017-12-22 16:08  回复

      @亚克力浴缸服务器性能强悍是一方面,如果你都加载很多外部资源,特别是国外资源,多给力的服务器也于事无补

  2. 优选
    优选 @回复

    似乎经常遇到这样的情况,学习了!

  3. 电炖锅的那些事
    电炖锅的那些事 【书童】 @回复

    又学习了新的方法,不过看起来比较难一样的。
    感谢你的分享了。

  4. 幻想
    幻想's Blog @回复

    可以,这种方法

  5. 阿江博客
    阿江博客 @回复

    确实有很多博客访问速度非常慢,博主的网站速度非常快的

  6. 明月清风
    明月清风 【举人】 @回复

    有点时间我的也很慢,后来就好了

  7. 前沿网
    前沿网 @回复

    一折腾就停不下来,所以不折腾!

  8. BanYuner
    BanYuner 【书童】 @回复

    这种分析方式确实是可以的,但是我觉得可以考虑倒着分析

  9. 热腾网
    热腾网 【小白】 @回复

    博主说的这是一方面,就像 99八十一 说的,如果服务器好,这不是问题。
    前段时间我也遭遇了这种情况,我的原因是服务器Tengine的问题,后改为了Nginx后这种现象就没了。

    • 懿古今
      懿古今【村长】2017-12-16 22:35  回复

      @热腾网[嘻嘻] 这篇文章重点的是学习其中解决问题的过程和思路,毕竟造成这个TTFB过长的原因可能有很多种

  10. 99八十一
    99八十一 【举人】 @回复

    服务器好的话,应该不存在这个问题吧?

  11. 明月登楼
    明月登楼 【尚书】 @回复

    为啥懿古今的评论信息也是导航站了? [偷笑]

    • 懿古今
      懿古今【村长】2017-12-15 21:14  回复

      @明月登楼[嘻嘻] 《关于统一懿古今和boke112导航管理员昵称和头像公告》中就说明以后评论统一使用懿古今昵称,网址就看是从哪个站点回访就留哪个。两个站点的管理员回复都统一为懿古今,网址也是留懿古今。

      • 明月登楼
        明月登楼 【尚书】2017-12-15 21:29  回复

        @懿古今感觉这样不好,虽然回访回评是方便了,但对两个站点的独立性不好!还是分开分清楚比较好!

  12. yerenban
    yerenban 【书童】 @回复

    记得上次的wp头像还是Gravatar 还是调用cn的那个域名的头像,那个速度不敢恭维啊,换个个国内的域名加速头像好多了。

    • 懿古今
      懿古今【村长】2017-12-15 20:24  回复

      @yerenban是的,gravatar头像最好还是换国内的域名,或者设置本地头像缓存,要不然确实很慢

    • 姜辰
      姜辰 【秀才】2017-12-15 22:02  回复

      @yerenban可以考虑自建镜像,自己使用。

  13. 唯心寒辞
    唯心寒辞 【小白】 @回复

    确实,我在博客上也引用了别人的一个小部件,偶尔也会出现抽风

    • 懿古今
      懿古今【村长】2017-12-15 20:25  回复

      @唯心寒辞所以能本地化的就尽量本地化,要引用别人的也要引用那种速度比较快的,要不然影响挺大的

  14. 闲鱼
    闲鱼 【秀才】 @回复

    引用外部资源就怕不稳定。问题排查解决的过程值得学习

    • 懿古今
      懿古今【村长】2017-12-15 20:26  回复

      @闲鱼是的,本文最大的价值不是问题的解决办法,而是问题的解决过程

  15. 明月登楼
    明月登楼 【尚书】 @回复

    其实就是要注意博客对外链的引用!

    • 懿古今
      懿古今【村长】2017-12-15 20:27  回复

      @明月登楼是的,特别是哪种引用国外的资源就更要注意了

  16. 值品分享
    值品分享 【书童】 @回复

    这段代码我以前也用过,主要是在后台发布中文文章自动翻译别名。感觉百度的有时候会抽风,后来换成bing的翻译。而且自动翻译的不是很好,不通顺还冗长,要自己修改,用了一段时间直接把它删掉了,影响心情。

    • 蝈蝈要安静
      蝈蝈要安静 【秀才】2017-12-15 15:01  回复

      @值品分享嗯嗯,用代码主要是为了避免忘记修改别名,而中文别名又常常出现各种问题。

  17. 历史趣谈
    历史趣谈 【秀才】 @回复

    从不折腾主题,不过作者的精神还是值得表扬的

  18. 一艘大轮船
    一艘大轮船 【小白】 @回复

    解决问题的思路也非常值得学习! [赞] [赞]

  19. 小苍老师
    小苍老师 【举人】 @回复

    这记住了,以后多多注意,免得也发生这样的问题而不知道怎么处理而抓瞎!

    • 懿古今
      懿古今【村长】2017-12-15 20:28  回复

      @小苍老师[嘻嘻] 本文重点是学习其中的解决问题的过程,懂得排除过程之后解决其他问题就会得心应手

  20. 金选网赚博客
    金选网赚博客 【小白】 @回复

    我的估计就是服务器的问题了

  21. 中青看点
    中青看点 @回复

    这样精彩的博客越来越少咯!

  22. 90客栈
    90客栈 【举人】 @回复

    我的速度还可以

  23. 银色月航
    银色月航 【进士】 @回复

    32赞赞赞,排查法不错。

  24. 重蔚自留地
    重蔚自留地 【书童】 @回复

    我也是觉得网站3秒内打开了就可以了

  25. 辩论吧
    辩论吧 【小白】 @回复

    网站体验要做好,速度也是重点

  26. 明月登楼
    明月登楼 【尚书】 @回复

    这个还是蛮意外的,竟然是代码造成的! [吃惊]

  27. 绿软库(lvrku)
    绿软库(lvrku) 【小白】 @回复

    一般站点能在3秒打开就不管了-,-

  28. 喵喵喵
    喵喵喵 @回复

    看过一篇文章,ttfb时间过长,也有可能是数据库的原因

    • 懿古今
      懿古今【村长】2017-12-15 20:30  回复

      @喵喵喵数据库也有可能,但是在文章量不多的情况下,数据库影响的一般都可以排除,不过如果最后找不到问题所在,就可以重点关注数据库问题了