当前位置 博文首页 > u012205779的博客:HTTP/1.1的性能问题及可优化方案

    u012205779的博客:HTTP/1.1的性能问题及可优化方案

    作者:[db:作者] 时间:2021-07-31 18:19

    ? ? ? ?当前HTTP/1.1协议已经走过了有20个年头了,面对现代WEB应用,特别移动应用的挑战,设计缺陷问题日益明显,以下将主要列出主要存在的五大问题

    1. 队头阻塞:在大多数情况下,浏览器获取资源都是多份的,HTTP/1.1并没有提供机制来同时请求所有的资源,在仅仅只有一个连接的时候(实际情况,现代浏览器可能针对单个域名建立多个连接,实现某程度并行),它需要发起请求,并等待响应.在这之后再发起下一请求,请求响应.即使HTTP/1.1有一个特性为管道化,允许发送一组请求,但是只能按照发送顺序依次接收响应;如果在请求应答过程中,出现任何的状况,剩下的所有请求都会被出现问题的请求应答之后,这就是"队头阻塞";
    2. 低效的TCP利用:TCP协议作为最可靠的协议之一,其核心就是拥塞窗口[拥塞窗口指的是在接收方确认数据包之前,发送方可以发出]的TCP包的数量];拥塞控制能防止过多的数据注入到网络中,避免网络过载.TCP中可以通过慢启动探索当前连接对应拥塞窗口的合适大小,即发送者发送数据的时候并非一开始注入大量数据到网络中,而是发送一个数据包进行测试,当得到确认回复后,额外发送一个未确认包,即得到一个确认回复,可以发送两个数据包,得到两个确认回复可以发送四个数据包,以几何形式增长便可很快到达协议规定的拥塞窗口规定,这时候连接进入拥塞避免阶段;这种机制需要往返几次才能得知最佳拥塞窗口大小,但往返几次所需的时间成本不可忽略;
    3. 臃肿的消息首部:HTTP/1.1能压缩请求内容,但是消息首部不能压缩;在现今请求中,消息首部占请求绝大部分(甚至是全部)也较为常见.
    4. 受限的优先级设置:即如果浏览器针对指定域名开启多个socket请求,若web页面某些资源比另外一些资源重要,这会加重资源的排队效应;即先请求优先级高的资源,在获取之后,再请求优先级较低的资源,并且在请求优先级高的资源的时间区间内浏览器并不会发起优先级较低的新请求.
    5. 第三方资源:资源完全独立于站点服务器的控制,称为第三方资源.?

    ????鉴于此,21世纪开始,也不断涌现出不同的web性能优化技术,总结概括如下:? ?

    1. DNS查询优化:?限制不同域名的数量(很难控制);保证低限度的解析延迟;在主题页面HTML或响应中利用DNS预取指令;
    2. 优化TCP连接:?尽早终止指令;利用preconnect指令,如下;?
      <link rel="preconnect" href="//fonts.example.com" crossorigin>
    3. 避免重定向:利用CDN代替客户端在云端实现重定向;如果是同一域名的重定向,使用WEB服务器上的rewrite规则,避免重定向;
    4. 客户端缓存;
    5. 网络边缘缓存:一份资源需要缓存,需要满足在多个用户之间可以共享并能够接受一定程度的旧数据;
    6. 压缩和代码极简化;
    7. 避免阻塞CSS/JS;
    8. 图片优化
    9. 条件缓存:利用通过HTTP提供条件请求机制,客户端做到有效询问服务器即"有内容改变返回新内容,没内容改变则告知";通常有两种实现形式;?(1)在请求中包含HTTP首部Last-Modified-Since;仅当最新内容在首部中指定的日期之后被更新过,服务器才返回完整内容;(2)在请求体中包含实体检验码,通过匹配实体检验码,确认内容是否一致;

    PS:以上资料通过Stephen Ludin && Javier Garza两位学者所著处总结所得,谢谢两位学者提供的知识.

    cs
    下一篇:没有了