Page 188 - Web性能权威指南
P. 188

发现减少资源数量或者将它们合并为更少的请求,反而能带来更大的好处。


                             DNS 查询和 TCP 慢启动导致的额外消耗对高延迟客户端的影响最大。换
                            句话说,移动(3G、4G)客户端经常是受过度域名分区影响最大的!




                 11.5 度量和控制协议开销


                 HTTP  0.9 当初就是一个简单的只有一行的 ASCII 请求,用于取得一个超文本文
                 档,这样导致的开销是最小的。HTTP  1.0 增加了请求和响应首部,以便双方能够
                 交换有关请求和响应的元信息。最终,HTTP  1.1 把这种格式变成了标准:服务器
                 和客户端都可以轻松扩展首部,而且始终以纯文本形式发送,以保证与之前 HTTP
                 版本的兼容。

                 今天,每个浏览器发起的 HTTP 请求,都会携带额外 500~800 字节的 HTTP 元数
                 据:用户代理字符串、很少改变的接收和传输首部、缓存指令,等等。有时候,500~
                 800 字节都少说了,因为没有包含最大的一块:HTTP  cookie。现代应用经常通过
                 cookie 进行会话管理、记录个性选项或者完成分析。综合到一起,所有这些未经压
                 缩的 HTTP 元数据经常会给每个 HTTP 请求增加几千字节的协议开销。


                            RFC 2616(HTTP 1.1)没有对 HTTP 首部的大小规定任何限制。然而,实际
                            中,很多服务器和代理都会将其限制在 8 KB 或 16 KB 之内。



                 HTTP 首部的增多对它本身不是坏事,因为大多数首部都有其特定用途。然而,由
                 于所有 HTTP 首部都以纯文本形式发送(不会经过任何压缩),这就会给每个请
                 求附加较高的额外负荷,而这在某些应用中可能造成严重的性能问题。举个例子,
                 API 驱动的 Web 应用越来越多,这些应用需要频繁地以序列化消息(如 JSON)的
                 形式通信。在这些应用中,额外的 HTTP 开销经常会超过实际传输的数据静荷一个
                 数量级:
                     $> curl --trace-ascii - -d'{"msg":"hello"}' http://www.igvita.com/api

                     == Info: Connected to www.igvita.com
                     => Send header, 218 bytes ➊
                     POST /api HTTP/1.1
                     User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 ...
                     Host: www.igvita.com
                     Accept: */*
                     Content-Length: 15 ➋


                                                                              HTTP 1.x   |   173
   183   184   185   186   187   188   189   190   191   192   193