一、请求分析
1.1 从资源获取、页面解析/渲染
资源请求
(1)把待请求URL放入队列;
(2) 解析URL中域名的IP地址(A);
(3) 建立与目标主机的TCP连接(B);
(4) 如果是HTTPS请求,初始化并完成TLS握手(C);
(5) 向页面对应的URL发送请求
(6) 接收响应;
(7) 如果(接收的)是主体HTML,那么解析它,并针对页面中的资源触发优先获取机制(A);
(8) 如果页面上的关键资源已经接收到,就开始渲染页面(B);
(9) 接收其他资源,继续解析渲染,直到结束(C)。
页面渲染
1.2、关键性能指标
1、网络延迟;2、带宽;3、DNS 查询;4、建立连接时间;4、TLS协商时间
5、更多的字节,更多的资源、更高的复杂度,更多的域名。
二、目前H1存在的问题。
1、 队头阻塞 默认六个连接。
2、低效的TCP利用 在接收方确认数据包之前,发送方可以发出的TCP包的数量。
例如,如果拥塞窗口指定为1,那么发送方发出1个数据包之后,只有接收方确认了那个
包,才能发送下一个, 默认 576 IP头部 28 UDP 8个字节。
3、首部不能压缩 460个字节。
4、受优先级的限制。
5、第三方资源的影响。
三、优化方向
1)、减少网络延迟
2)、优化页面渲染
3)、DNS查询优化(限制不同域名的数量,降低解析域名的延迟(定时监控,不同服务商服务质量的差异,DNS预取指令(ajax.googleapis.com),在解析HTML主体时,解析其他域名)。
4)、TCP建立连接优化(利用 preconnect 指令 5,连接在使用之前就已经建立好了, 尽早终止并响应。借助 CDN,在距离请求用户很近的边缘端点上,请求就可以获得响应。所以可以终止连接,大幅减少建立新连接的通信延迟,实施最新的 TLS 最佳实践 6 来优化 HTTPS)
5)、避免重定向 (利用CDN代替客户端在云端实现重定向,如果是同一域名的重定向,使用 Web 服务器上的 rewrite 规则,避免重定向)。
6)、客户端缓存
7)、压缩和代码极简化
8)、图片优化
图片元信息,例如题材地理位置信息、时间戳、尺寸和像素信息,通常包含在二进制数据里,应该在发送给客户端之前去掉。
网友评论