这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战。
并行连接(parallel connections)
上篇介绍了连接复用,那么即使使用「连接复用」让一个 TCP 连接可以传输多个请求和响应,但是这些请求和响应是串行的:先请求,再响应;然后才能进行第二次请求和第二次响应。
在需要请求的资源较多,且资源之间没有依赖关系时(比如十个互不依赖的 CSS 文件),我们更希望这十个请求是并行的:十个请求同时(也可以短时间内依次)发出,十个响应陆续返回。这样一来,下载速度不就是原来是十倍嘛!
做法很简单,前端程序员只需要把一个 CSS 分成十个小文件,浏览器就会自动地一次性创建十个 TCP 连接来请求这些文件。
— 那么,为什么不把十个变成一百个、一千个呢?速度可以变得更快。
— 原因是浏览器忙不过来,每创建一个 TCP 连接都需要耗费一定 CPU 和内存,而 CPU 和内存都是有限的。
因此浏览器们不约而同地限定了每个域名的并行连接数量的上限:6 个。也有些浏览器将其设置为 2、4、8、9、10、12 等。但这难不倒我们,既然每个域名最多有 6 个连接,那我们多用几个域名不就可以突破限制了吗?比如:
- css.cdn.com 专门用于下载 CSS 文件
- js.cdn.com 专门用于下载 JS 文件
- image.cdn.com 专门用于下载图片文件
- juejin.cn 专门用于下载 HTML 文件
这样一来,并行连接数的上限就可以扩大到 24 个了。 但是浏览器为了防止程序员滥用这个特性,又加了另一个限制:整个浏览器的并发连接数也有上限。
并行连接的优缺点
- 优点:并行连接可以在带宽资源充足的情况下同时建立多个HTTP连接,加快页面的加载速度。
- 缺点:并行连接在带宽资源不足的情况下会是连接竞争资源,效率反而下降。同时建立多条连接会消耗大量内存,对服务器来说,大量的用户产生大量的连接可能会超过服务器的处理能力,所以服务器一般能够关闭来自特定客户端的超量连接!
最后说一句
如果这篇文章对您有所帮助,或者有所启发的话,帮忙关注一下,您的支持是我坚持写作最大的动力,多谢支持。