探究http2的多路复用实用场景

http2多路复用概念

在web.dev对http2.0的描述中,多路复用有如下特性。

将HTTP消息分解为独立的帧、交错传输,然后在另一端重新组装它们的能力是HTTP/2最重要的增强功能。事实上,它在所有web技术的整个堆栈中引入了众多性能优势的连锁反应,例如:

  • 并发多个请求,不阻塞任何一个请求。
  • 并发排列多个响应,不阻塞任何一个响应。
  • 使用单个TCP连接可以并行传递多个请求和响应。.
  • 删除不必要的HTTP/1.x解决方案(请参阅优化HTTP/1.x,如级联文件、图像精灵和域碎片)。
  • 通过消除不必要的延迟和提高可用网络容量的利用率,降低页面加载时间。.

其实总的来说,就是使用帧(frame)进行数据传输,使得同一个域下的所有请求,可以在一个TCP连接中进行传递,最高效率的利用信道负载。

http2多路复用实际场景分析

下面构造一些实际场景,对比http1.1和http2.0的效果:

1. 请求堵塞

先用nginx模拟一个要等待10s的请求,longTask:

实际情况下,这种服务端耗时大的请求常常是主要的页面的性能瓶颈之一。

那么运行以下代码:

js 复制代码
for(let i = 0; i < 100; i++) {
    fetch(`https://localhost:8094/longTask${i}`)
}

http1.1效果:

http2效果:

这对比效果就很明显了,http1.1因为同一个域下只有6条TCP链接上限,故100个堵塞请求并发,后面的请求需要等前面的请求都完成才能触发。可以看到,等待时间已经达到2.7min。

而http2可以将请求并发(看起来也不是能直接并发所有请求,最后一个请求有2s的延迟,可能和信道的传输上限有关)。直接避免了因为堵塞的请求造成的网络性能问题。

2. 大量请求或者文件下载

使用一个加载时间大约9s的视频资源作为测试

运行下列代码:

js 复制代码
for(let i = 0; i < 1000; i++) {
    fetch("https://localhost:8096/video/1.mp4")
}

http1.1效果:

http2效果:

在这个案例中,http1.1和http2所花时间耗时基本相同。因为下载视频的时间都是处于content download阶段,是一直需要信道资源的,所以虽然http2可以使用分帧传输,但是在信道资源被占满的情况下,后续的请求也只有进行等待了。

在上一个案例中,等待的阶段是waiting for serve response 这个时候虽然有100并发,但是信道基本是空载的,没有信息帧传输,所以才能达到100请求同时完成的效果。

总结

综上所述,http2.0的多路复用虽然能解决类似请求堵塞造成的性能问题,但是前端依然需要在方案层面严格控制请求并发,大量的请求仍然会对实际生产场景产生堵塞问题。

相关推荐
爱喝水的鱼丶3 小时前
SAP-ABAP:BAPI 基础认知:SAP 标准业务对象接口的核心逻辑与调用入门
信息可视化·性能优化·sap·abap·bapi·开发交流·交流学习
pcplayer16 小时前
Delphi WebService 使用 HTTP Header 管理 Session
http·webservice·soap·web server·http header
FfHUCisI17 小时前
Golang HTTP 路由设计与请求处理
开发语言·http·golang
小新讲网安18 小时前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞
AI服务老曹1 天前
边云协同视频分析性能优化指南:多站点部署下的资源瓶颈突破与调优实战
性能优化·音视频
wear工程师1 天前
接口超时别只调大 timeout:Java HTTP 客户端其实有 3 段等待
java·http
蜡台1 天前
本机 局域网 搭建本地 HTTPS 域名完整方案
网络协议·http·https·openssl
A_cainiao_A2 天前
【ggml系列】【第五篇】ggml_compute_forward_mul_mat 矩阵乘法算子源码与性能优化深度解析
线性代数·性能优化·矩阵
ai产品老杨2 天前
边云协同视频分析性能优化指南:多站点部署下的参数配置与排查清单(边缘推理+云端管理)
性能优化·音视频
苏打水com2 天前
《llama.cpp性能优化实战:从显存、KV Cache到Token/s》
性能优化·llama