欢迎关注方志朋的博客,回复”666“获面试宝典

思考路径:

为什么要实现batch call? -> 减少网络中的传输损耗 -> 如何减少的? -> 通过合并HTTP请求 -> 合并HTTP请求是如何减少网络损耗的?

本文将解决这个问题。一起看看单个请求携载大量信息和多个请求携载小量信息对于整个时间的影响。

1. Client发出请求

1.1 HTTP 1.1

可以保持长连接,但是每个不同的请求之间,client要向server发一个请求头

请求无法并行执行的,在一个连接里面

假设如果不合并的话需要建立N个连接,那么合并就可以省去(N-1)*RTT的时间,RTT指网络延迟(在传输介质中传输所用的时间,即从报文开始进入网络到它开始离开网络之间的时间)。

1.2 TCP丢包问题

慢启动,拥塞控制窗口

TCP报文乱序到达,合并后的文件可以允许队首丢包以后在队中补上来,但是分开资源的时候,前一个资源未加载完成后面的资源是不能加载的,会有更严重的队首阻塞问题,丢包率会严重影响Keep alive情况下多个文件的传输速率。

1.3 浏览器线程数限制

多为2-6个线程,会在每个连接上串行发送若干个请求。TCP连接太多,会给服务器造成很大的压力的。

1.4 DNS缓存问题

每次请求都需要找DNS缓存,多个请求就需要查找多次,而且缓存有可能被无故清空

2. 服务器处理请求

每个请求需要使用一个连接,建立一个线程,分配一部分CPU, 对于CPU而言,是种负担,尤其是一般来说建立了连接以后,哪怕发回了请求,这个连接还会保持一段时间才会timeout。这种时候,维持连接是对服务器资源的一种巨大的浪费。

3. HTTP 2.0

上面描述的所有都是基于HTTP/1.1的一些特性,或者说弊端,有长连接但是无法并行处理请求,TCP的慢启动和拥塞控制,队首阻塞问题都给整个性能带来很多弊端,因此我们有了HTTP2.0来做针对性的改进。很有意思的东西,直接看图:

  • HTTP/1.1 network的请求图

  • HTTP/2 network的请求图

就是这么酷炫,HTTP/2多了很多特性来解决HTTP/1.1的很多问题

3.1 Fully multiplexed

解决了队首阻塞的问题。对于同一个TCP连接,现在可以发送多个请求,接收多个回应了!在HTTP/1.1里面,如果在一个连接里上一个请求发生了丢包,那么后面的所有请求都必须等第一个请求补上包,收到回应以后才能继续执行。而在HTTP/2里面,可以直接并行处理。

3.2 Header Compression

所有的HTTP request和response都有header,但是header里很可能包含缓存信息,导致他的大小会迅速增大的。但是在一个连接里大部分请求的请求头其实携带的信息都很类似,所以HTTP/2使用了索引表,存储了第一次出现的请求的请求头,然后后面的类似的请求只需要携带这个索引的数字就好了。头部压缩平均减少了30%的头部大小,加快了整体的网络中传输的速度。

这两点是和本文关系最大的,有了这两点,实质上合并HTTP请求的好处在HTTP/2的协议下,已经基本上消失了。合并不合并请求,更多的是看业务上的需求,后端的一些配置。

4. 总结

It's a trade-off. 其实最重要的是看你传输什么东西,因为合并HTTP请求实质上是减少了网络延时,但是如果你在服务器上处理的时间远远大于网络延时的时间的时候,那么合并HTTP请求并不会给你带来很多性能上的提升。而且大数据量的传输一定会降低浏览器的cache hit rate,对于缓存的利用率会降低很多。但是对于HTTP请求携带的数据量比较少的情况,合并请求带来的性能提升会是显而易见的。

来源:https://www.jianshu.com/p/9a3f0e84c2b0

热门内容:
  • 杭州程序员从互联网跳央企,晒一天工作和收入,网友:待一年就废

  • 别人家的公司的 1024 程序员节 ! 羡慕了!

  • 学废了!面试官常问的14个......

  • 抖音的服务器究竟有多大?

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

明天见(。・ω・。)ノ

为什么要合并HTTP请求?相关推荐

  1. 合并HTTP请求 vs 并行HTTP请求,到底谁更快?

    面试时,经常会问候选人一个问题:如何提高网页性能? 有些基础的人都会提到这么一条:减少/合并HTTP请求. 继续问:浏览器不是可以并行下载资源吗?将多个资源合并成一个资源,只使用一个HTTP请求下载, ...

  2. 并发编程--用SingleFlight合并重复请求

    大家好啊,今天网管想给大家介绍一下Go的singleflight包,当然它不是直译过来的单飞的意思~~!SingleFlight是Go语言sync扩展库提供的另一种并发原语,那么SingleFligh ...

  3. webpack4+node合并资源请求, 实现combo功能(二十三)

    本文学习使用nodejs实现css或js资源文件的合并请求功能,我们都知道在一个复杂的项目当中,可能会使用到很多第三方插件,虽然目前使用vue开发系统或者h5页面,vue组件够用,但是有的项目中会使用 ...

  4. 系统首页优化-合并数据请求并发处理数据

    目录 优化策略 JSON格式模块化 请求处理并发化 请求处理并发化更优的解决方法 前端渲染异步化 测试效率 优化策略 合并请求 数据并发处理 数据异步渲染 对于系统首页的处理数据量不大,可以通过合并请 ...

  5. 【问题解决】git 合并commit 请求报错:Cannot ‘fixup‘ without a previous commit

    1.如果你回不去原分支了,或者无法再次 rebeat,可以按照 git 提示方法先删除,回到原分支使用 checkout 即可.这是小问题. 2.rebeat,不管你是要留下哪些个请求,第一行的 co ...

  6. Hystrix:HystrixCollapser请求合并

    偶尔在spring4all,看到DiDi关于hystrix请求合并的一篇文章 Spring Cloud Hystrix的请求合并,查阅资料又整理了一下. 具体业务概念,什么是请求合并?请求合并优缺点? ...

  7. dueros模拟测试没有请求后台_实战 | 用手写一个骚气的请求合并,演绎底层的真实...

    来源:公众号[ java进阶架构师] 好文推荐: 字节跳动Java岗4面面经分享:索弓|+rabbitmq+spring+Redis 拼多多面经Java开发3面面经:准备好久没想到面试题超级简单 网易 ...

  8. SpringCloud实战4-Hystrix线程隔离请求缓存请求合并

    接着上一篇的Hystrix进行进一步了解. 当系统用户不断增长时,每个微服务需要承受的并发压力也越来越大,在分布式环境中,通常压力来自对依赖服务的调用,因为亲戚依赖服务的资源需要通过通信来实现,这样的 ...

  9. Web网络知识:什么是HTTP请求合并?

    思考路径: 为什么要实现batch call? -> 减少网络中的传输损耗 -> 如何减少的? -> 通过合并HTTP请求 -> 合并HTTP请求是如何减少网络损耗的? 本文将 ...

最新文章

  1. 度量相似性的一些指标/函数
  2. bs4 python解析html
  3. 计算机视觉编程——图像搜索
  4. 摄影中的色温和白平衡及其二者关系的全面详解
  5. (二十)python 3 匿名函数
  6. [Leedcode][JAVA][第466题][统计重复个数][数组]
  7. WMRouter:美团外卖Android开源路由框架
  8. w ndows7文档加密取消,win7文件夹怎么加密?windows7文件加密方法
  9. 增加mysql的sortbuffer_mysql 参数调优(14)之优化filesort sort_buffer_size、innodb_sort_buffer_size...
  10. SpaceX载人龙飞船意外爆炸,据称几乎被完全摧毁
  11. 深入理解C#的装箱和拆箱
  12. maven打jar包 没有主属性清单
  13. 广义注意力- saliency map 关注图、gaze、Att
  14. 在android studio开发中,关于绘制GifView异常,硬件加速问题的解决办法
  15. 华为手机相册怎么镜像翻转_怎么制作照片视频?利用手机相册快速制作卡点视频...
  16. a标签下载txt,会直接打开txt文件的处理方法
  17. 穷举暴力破解密码(真香版)
  18. 输入一个数求他的因数c语言,【代码】求一个数的因数和、求优化、顺便也供新人参考算法...
  19. markdown编辑器。
  20. 各大企业服务器位置,服务器各大企业对比

热门文章

  1. vi 环境,跳转函数定义
  2. Applet相关知识
  3. windows远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可
  4. C++构造函数(一)
  5. 人机猜拳(这是最近的一个总结)
  6. Topcoder SRM 657DIV2
  7. 使用浏览器wpf应用程序时访问数据库需要报权限错误的解决方法
  8. SharePoint 2007 系列(4) -Site Settings
  9. 电子学会青少年编程等级考试Python案例08
  10. mysql noinstall_windows mysql noinstall