性能篇----浏览器http同域名并发请求限制

1,347 阅读4分钟

浏览器http同域名并发请求限制的原因和优化策略

未经本人同意,切勿随意转载

通常浏览器对于同域名并发请求数都有限制,一般限制在4-8范围。那么我们来分析浏览器请求并发限制的原因和优化出发来学习这篇文章

image.png

为什么浏览器要限制请求并发数?

1. 对于操作系统端口资源的考虑
我们都知道电脑的端口数量为65536,一个TCP连接就需要占用一个端口。如果不限制,随意发送请求,是不是会把电脑端口全部都给迅速消耗完。
2.过多的并发会导致频繁切换产生性能问题
一个线程对应处理一个http请求,如果并发数量巨大的话会导致线程的频繁切换。线程的切换并不是一个轻量级的资源。这样会得不偿失,所以请求控制器里面会产生一个链接池,以复用之前的链接。所以我们可以看作同域名下链接池最大为4~8个。如果链接池全部被使用会阻塞后面请求任务,等待空闲有空闲的链接时执行后续任务。
3.避免同一客户端并发大量请求超过服务端的并发阈值
在服务端通常对同一个客户端设置了并发阈值避免恶意攻击,如果浏览器不对同一域名做并发限制可能会导致超过服务端的并发阈值而导致服务器将该客户端请求忽视(进黑名单)。
4.客户端良知机制
为防止两个应用抢占资源时候导致强势一方无限制的获取资源,导致弱势一方永远阻塞状态
举个不恰当例子,用户A网络很好,用户B网络贼差,然后用户A对服务器发起近1000个请求,只有等用户A1000个请求处理完,才能够接着处理用户B的请求。

优化手段

1.域名发散
将请求通过多个域名分开请求,例如一共有100个请求,将请求分为四个域名来请求,那么一个域名请求4-8,四个就是16-32.为何建议是4个左右呢,因为过多域名会导致dns解析性能问题。
2.cookie free
众所周知,网络请求时常可能伴随着cookie的携带,而cookie本身也存在着一定的大小,例如当前网站cookie的大小为5kb,发送150个请求需要全部携带上cookie的大小就是5*150=750kb,在1024Kbs的带宽下,需要接近7.5s左右的时间才能把全部请求发送完。尽管这些请求可能存在并发执行,也许时间只需要原有的1/4,但是我们知道有些请求是没有必要携带cookie的,比如对于静态资源的请求上。所以我们可以通过启用主站点域名和其他域名的方式区分是否携带cookie。
3.小图片合并成大图(雪碧图)
容易理解就是将多个图片合并成为一张大图,原本请求多张图片的请求,现在只需要请求一次,来减少请求数量,雪碧图也是常见的一种优化手段。
4.设置Cache-Control max-age
当我们确定项目哪些资源是长久不变的我们对其设置版本号控制和Cache-Control max-age进行长时间缓存,减少浏览器对资源重新请求。
5.懒加载
懒加载其实大家都大致请求原理,就不过多描述,其实本质和雪碧图差不多,
都是为了减少请求的发送,在用户未看到一些图片或者资源的时候,暂时就不
需要发送请求加载出来,当用户需要看的时候,再按需加载。
6.PWA(渐进式应用)
说实话,我第一次看到这个词的时候,第一反应听过,并不知道是干啥的,于是乎网上搜索了一番。

总结就是,一种技术叫做Service Worker对当前应用请求过的请求进行缓存到客户端,
用户下次访问页面或者刷新页面的时候直接从客户端本地直接读取之前的response。
如果细化可以控制到静态资源和api请求等。但是他有个限制条件:只能缓存https
协议和主站点域名的请求。并且之前缓存过的请求需要在下次PWA机制启动的时候进
行请求和刷新,这样会导致缓存的资源需要两次访问页面才能发生更新。

总之,这个技术挺厉害的,但是我并不是很会,大概看了下网上的例子与应用,有兴趣的可以去看看分享下给我。

原文地址:blog.csdn.net/qq_33490514…