Page 183 - Web性能权威指南
P. 183
ਜ਼ࢽ܋ ޜခഗ
ޜခഗت้क़ǖ40 ms
HTMLၚᆌ
तCSSၚᆌ
࠲Կথ
图 11-4:使用 HTTP 管道发送请求,且服务器端并行处理
图 11-4 演示了如下几个方面:
• HTML 和 CSS 请求同时到达,但先处理的是 HTML 请求;
• 服务器并行处理两个请求,其中处理 HTML 用时 40 ms,处理 CSS 用时 20 ms;
• CSS 请求先处理完成,但被缓冲起来以等候发送 HTML 响应;
• 发送完 HTML 响应后,再发送服务器缓冲中的 CSS 响应。
即使客户端同时发送了两个请求,而且 CSS 资源先准备就绪,服务器也会先发送
HTML 响应,然后再交付 CSS。这种情况通常被称作队首阻塞,并经常导致次优化
交付:不能充分利用网络连接,造成服务器缓冲开销,最终导致无法预测的客户端
延迟。假如第一个请求无限期挂起,或者要花很长时间才能处理完,怎么办呢?在
HTTP 1.1 中,所有后续的请求都将被阻塞,等待它完成。
在前面讨论 TCP 时,我们已经提到过队首阻塞的问题了。由于 TCP 要求
严格按照顺序交付,丢失一个 TCP 分组就会阻塞所有高序号的分组,除非
重传那个丢失的分组,这样就会导致额外的应用延迟,详细情况请参考 2.4
节“队首阻塞”。
实际中,由于不可能实现多路复用,HTTP 管道会导致 HTTP 服务器、代理和客户
端出现很多微妙的,不见文档记载的问题:
168 | 第 11 章