Timing

  • Resource Scheduling
    • Queueing: 队列 — 请求排队的时间。浏览器是有线程限制的,发请求也不能所有的请求同时发送,会将请求加入队列中(Chrome的最大并发连接数是6)。如果说同一时间,发起的同一域名的请求超过了6个,这时候就需要排队了。
  • Connection Start
    • Stalled: 阻塞 — 浏览器得到要发出这个请求的指令,到请求可以发出的等待时间,一般是代理协商、以及等待可复用的TCP连接释放的时间,不包括DNS查询、建立TCP连接等时间等
    • Proxy nengotiation
    • DNS Lookup: DNS查找 — 请求某域名下的资源,浏览器需要先通过DNS解析器得到该域名服务器的IP地址
    • Initial connection: 建立TCP连接 — 客户端从发请求开始到TCP握手结束这一段,包括DNS查询+Proxy时间+TCP握手时间
    • SSL: 安全套阶层 — 加密数据,https 是安全套接字层超文本传输协议,就是在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
  • Request/Reponse
    • Request sent: 发送请求 — 请求第一个字节发出前到最后一个字节发出后的时间,也就是上传时间
    • Waiting(TTFB): 首字节时间 — 请求发出后,到收到响应的第一个字节所花费的时间(Time To First Byte)
    • Content Download: 内容下载 — 收到响应的第一个字节,到接受完最后一个字节的时间,就是下载时间

Stalled优化:

浏览器对同一个主机域名的并发连接数有限制,因此如果当前的连接数已经超过上限,那么其余请求就会被阻塞,等待新的可用连接;此外脚本也会阻塞其他组件的下载;

前端Dashboard页面展示的图表数据最好是提前统计好,然后放到缓存里面,避免统计时间比较长的ajax请求太多阻塞其他请求。

将资源合理分布到多台主机上,可以提高并发数,但是增加并行下载数量也会增大开销,这取决于带宽和CPU速度,过多的并行下载会降低性能;

脚本置于页面底部;

Stalled时间过长是网络问题导致的,有可能是本地网络不好,有可能是服务器网络不好,也有可能是中间链路的网络节点故障(防火墙、网关、VPN等等)。走内网IP访问不存在此问题,在内网做本地DNS,在公司通过域名访问则直接解析到内网IP。

DNS优化:

在DNS查找完成之前,浏览器不能从主机名那里下载到任何东西。DNS查询的时间,当本地DNS缓存没有的时候,这个时间可能是有一段长度的,但是比如你一旦在host中设置了DNS,或者第二次访问,由于浏览器的DNS缓存还在,这个时间就为0了。

利用DNS缓存(设置TTL时间)

利用Connection:keep-alive特性建立持久连接,可以在当前连接上进行多个请求,无需再进行域名解析;

Request sent优化:

减少HTTP请求,可以使用CSS Sprites、内联图片、合并脚本和样式表等;

对不常变化的组件添加长久的Expires头(相当于设置久远的过期时间),在后续的页面浏览中可以避免不必要的HTTP请求;

Waiting优化:

发送请求完毕到接收请求开始的时间;通常是耗费时间最长的。从发送请求到收到服务器响应的第一字节之间的时间,受到线路、服务器距离等因素的影响。

网页重定向越多,TTFB越高,所以要减少重定向

使用CDN,将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求,提高响应速度;

Content Download优化:

通过条件Get请求,对比If-Modified-Since和Last-Modified时间,确定是否使用缓存中的组件,服务器会返回“304 Not Modified”状态码,减小响应的大小;

移除重复脚本,精简和压缩代码,如借助自动化构建工具grunt、gulp等;

压缩响应内容,服务器端启用gzip压缩,可以减少下载时间;

原文链接:https://blog.csdn.net/lhz_333/article/details/93544313

Article
Tagcloud
DVA Java Express Architecture Azure CI/CD database ML AWS ETL nest sql AntV Next Deep Learning Flutter TypeScript Angular DevTools Microsoft egg Tableau SAP Token Regexp Unit test Nginx nodeJS sails wechat Jmeter HTML2Canvas Swift Jenkins JS event GTM Algorithm Echarts React-Admin Rest React hook Flux Redux ES6 Route Component Ref AJAX Form JSX Virtual Dom Javascript CSS design pattern