理解Chrome请求流程

Timing Tab

Chrome的DevTools中提供了对请求的时间分析,如配图所示。

对每个请求,Chrome统计了它们不同阶段的通信时间,包括:

Queueing

Queueing意味着请求没有马上发生,加入队列排队等候。导致这种情况一般可能的原因有:

要注意的是第三点中的6个TCP连接数上限在不同浏览器中也不相同,根据HTTP协议的规定限制数量应为2个,但是各浏览器有不同的标准:


| Browser | Maximum connections |
|---------|---------------------|
| IE7     | 2                   |
| IE8/IE9 | 6                   |
| IE10    | 8                   |
| IE11    | 13                  |
| FireFox | 6                   |
| Chrome  | 6                   |
| Safari  | 6                   |
| Opera   | 6                   |
| iOS     | 6                   |
| Android | 6                   |
---------------------------------

Stalled

当请求被放入队列后,就会有阻塞的时长。Stalled描述的是请求被发送之前等待的时长,一般就是Queueing中的原因导致的。除此之外,Stalled还包含了代理协商的时长。

DNS Lookup

进行DNS查找(域名解析)的时长。每次请求一个新的域名的时候,需要进行一次完整的域名解析过程。

Proxy negotiation

浏览器与代理服务器进行协商的过程。

Initial Connection /Connecting

建立连接的时长,包括TCP握手/重试的时长和SSL协商的时长。

SSL

完成SSL握手的时长。

Request sending/sent

发布请求的过程时间,一般非常快。

ServiceWorker Preparation

浏览器启动Service Worker的时长。

Request to ServiceWorker

请求被发送至Service Worker的时长。

Waiting(TTFB)

等待最初相应的时长,A.K.A Time To First Byte。这个时长等于请求发送至服务器的延迟、响应返回至客户端的延迟、服务器处理请求的时间之和。

Content Download

浏览器接收完整相应的时长。

Receiving Push

浏览器接收服务器(HTTP/2)推送数据的时长。

Reading Push

浏览器读取接收到数据的时长。

结合上图为例,可以看到请求图中接口的时间消耗:

本次请求一共花了115.16ms(数据求和为114.95ms,推断各阶段间有细微执行时间没有统计到)。

Full Request Process

现在结合Chrome的DevTools信息,再来更新一下从请求到页面展示的流程,以用户在浏览器中输入www.baidu.com为例,其中Chrome相关内容加粗显示:

Ref

Understanding Resource Timing

chromium.org – Issue: Match Firefox’s per-host connection limit of 15

Service Worker