浏览器请求时间分布
我们通过浏览器打开一个网页,有可能会加载很多资源,而这个页面最终正确展示所消耗的时间就是各个资源总的加载时间,而一个页面加载慢不一定是后端server响应慢,原因有多种,有可能是等待时间长,有可能是资源下载慢;这里对一请求的各个步骤做个解释,便于后续具体问题具体分析;
从上图我们可以看出百度首页的加载过程,以及各个步骤的耗时,下面一一介绍下;
Queueing:
这个是请求从加到队列到开始执行的耗时;我们页面如果请求的网络资源比较多,则浏览器会发起并发连接请求,谷歌最的并发数是6,所以如果我们页面请求的网络资源数如果超过6个,则会放入队列中等待执行;
Stalled:
浏览器准备发出请求指令,到请求可以发出的等待时间,一般是代理协商、以及等待可复用的TCP连接释放的时间,不包括DNS查询、建立TCP连接等时间等。浏览器对同一个主机域名的并发连接数有限制,因此如果当前的连接数已经超过上限,那么其余请求就会被阻塞,等待新的可用连接;此外脚本也会阻塞其他组件的下载。
从下面的图中可以看出,如果短时间内浏览器的请求数过大,则Queueing和Stalled会处于长时间的等待执行状态,耗时会很长:
DNS Lookup:
DNS 解析时间。在 DNS 查找完成之前,浏览器不能从主机名那里下载到任何东西。没有本地缓存的时候,DNS查询的时间比较长。但是比如在 host 中设置了 DNS,或者第二次访问,由于浏览器的 DNS 缓存还在,这个时间就非常短了。
Initial connection:
浏览器建立 TCP 连接的时间,浏览器从发请求开始到 TCP 握手结束这一段时间,包括 DNS 查询 + Proxy 时间+ TCP 握手时间。
SSL:
http是超文本传输协议,以明文方式发送内容,不提供任何方式的数据加密,如果被不法分子截取浏览器和服务器之间的传输报文,会获取其中的信息。
https 是安全套接字层超文本传输协议,就是在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。因此建立HTTPS连接的时间相当于三次握手的时间+SSL时间。
Request sent:
服务器发送HTTP请求,从第一个字节发出前到最后一个字节发出后的时间。
Waiting(TTFB):
从浏览器发起请求,到服务器的首字节响应的时间(Time To First Byte)。这个阶段通常是耗费时间最长的。可能受到线路、服务器距离等因素的影响。
Content DownLoad:
收到响应的第一个字节,到接受完最后一个字节的时间,就是资源下载时间。