前端调试-根据瀑布图进行优化

2,237 阅读3分钟

前置知识

瀑布图:是请求不同阶段的图形表示。将鼠标悬停在瀑布上可以查看细目  鼠标放上去会看到下面的面板 下面我们来介绍下这些英文和数字代表什么意思

  • 总计:

    • Queued 队列总耗时
    • Started 在什么时候发起请求,一般于Queued相差几十毫秒

Queueing (队列)

  • 该请求被渲染引擎推迟了,因为它被认为比关键资源(例如脚本/样式)的优先级低。这通常发  生在图像上。
  • 该请求被暂停以等待将要释放的不可用的TCP套接字。
  • 由于浏览器在HTTP 1上每个源仅允许六个TCP连接,因此该请求被暂停。
  • 花在制作磁盘缓存条目上的时间(通常非常快) Stalled/Blocking(阻塞)
  • 请求等待发送之前花费的时间。它可能正在等待队列中描述的任何原因。此外,此时间包括代理协商中花费的任何时间。 Proxy Negotiation(代理协商)
  • 与代理服务器连接进行协商所花费的时间。

DNS Lookup(DNS查询)

  • 与代理服务器连接进行协商所花费的时间。 Initial Connection (初始化连接)
  • 建立连接所花费的时间,包括TCP握手/重试和协商SSL。 SSL
  • 完成SSL握手所花费的时间 Request Sent (请求发送)
  • 发出网络请求所花费的时间。通常为一毫秒的时间。 Waiting (TTFB)(Time To First Byte)
  • 等待初始响应所花费的时间,也称为到达第一个字节的时间。除了等待服务器传递响应所花费的时间之外,该时间还捕获了到服务器的往返延迟。 Content Download (内容下载)
  • 接收响应数据所花费的时间。

我们开发中最应该关注:

Started:   什么时候发起这个请求

Waiting (TTFB)(Time To First Byte) 这个接口耗时了多少

Content Download (内容下载 )从服务器下载到本地耗时了多久

案例

图标库的优化

背景

图标库页面的加载过慢,需要优化下。(图标的加载是后端存成了id,前端调用接口进行下载展示)

分析

打开F12,查看network, 发现下载的瀑布图是阶梯状的,一个接着一个发起,因为图标的加载默认是没有依赖关系,这里可以同步发起。  

查看页面代码后。发现代码确实是在发起请求后,当上一个请求有response后再发起下一次请求

下方的图片为当时的瀑布图

修改后

请求同时发起,瀑布图也是期望的样子。

用户体验的优化

  1. 之前使用的是promise.all,当所有请求结束,页面的loading才结束,展示给用户
  2. 修改为取消loading,使用elementUi组件 el-image,给图标加一个loading状态,当response有响应,再将真实的图片地址替换掉,更快的展示给用户

总结

如何根据瀑布图进行优化

Started 过长,

  1. 检查静态资源是否过大,导致请求延后,将资源进行分包
  2. 检查请求是否链式调用,可以考虑将请求同步发起,如果真的是后一个请求依赖前一个请求,考虑是否有更好的方案

  Waiting 过长

  1. 先与后端沟通接口是否可以调优
  2. 前端与后端沟通用到了哪个字段,检查是否多查询了无用的字段

Content Download 过长

  1. 接口响应长(是否多返回了无用的字段)
  2. 静态资源过大(webpack进行分包按需加载)

谷歌调试工具英文文档

谷歌调试工具中文版本