- HTTP 允许客户端打开多条连接,并行地执行多个 HTTP 事务。在下面这个例子中,并行加载了四幅嵌入式图片,每个事务都有自己的 TCP 连接。嵌入的组件不一定都在同一台 Web 服务器上,可以同多台服务器建立并行的连接。
1. 并行连接可能会提高页面的加载速度
- 包含嵌入对象的组合页面如果能通过并行连接克服单条连接的空载时间和带宽限制,加载速度也会有所提高。时延可以重叠起来,而且如果单条连接没有充分利用客户端的因特网带宽,可以将未用带宽分配来装载其他对象。
- 举例:4个事务,首先装载的是封闭的 HTML 页面,然后并行处理其余的 3 个事务,每个事务都有自己的连接。图片的装载是并行的,连接的时延也是重叠的。(注:由于软件开销的存在,每个连接请求之间总是会有一些小的时延,但连接请求和传输时间基本上都是重叠起来的。)
2. 并行连接不一定更快
- 即使并行连接的速度可能会更快,但并不一定总是更快。
- 客户端的网络带宽不足时,大部分的时间可能都是用来传送数据的。一个连接到速度较快服务器上的 HTTP 事务很容易耗尽所有可用带宽。如果并行加载多个对象,每个对象都会去竞争这有限的带宽,每个对象都会以较慢的速度按比例加载,这样带来的性能提升就很小,甚至没什么提升。
- 实际上,多条连接会产生一些额外的开销,使用并行连接装载整个页面所需的时间很可能比串行下载的时间更长。
- 打开大量连接会消耗很多内存资源,从而引发自身的性能问题,尤其是服务器在同时处理大量用户请求时性能会严重下降。
- 实际上,浏览器确实使用了并行连接,但它们会将并行连接的总数限制为一个较小的值(通常是 4 个)。服务器可以随意关闭来自特定客户端的超量连接。
3. 并行连接可能让人“感觉”更快一些
- 即使实际上并行连接并没有加快页面的传输速度,通常也会让用户觉得页面加载得更快了,因为多个组件对象同时出现在屏幕上时,用户能够看到加载的进展。
- 随着渐进式图片应用的逐步增加,这种效果就更加明显了。(渐进式图片会先显示低分辨率的近似图形,然后再逐渐增加图片的分辨率。)