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 章
   178   179   180   181   182   183   184   185   186   187   188