Page 189 - Web性能权威指南
P. 189
Content-Type: application/x-www-form-urlencoded
=> Send data, 15 bytes (0xf)
{"msg":"hello"}
<= Recv header, 134 bytes ➌
HTTP/1.1 204 No Content
Server: nginx/1.0.11
Via: HTTP/1.1 GWA
Date: Thu, 20 Sep 2012 05:41:30 GMT
Cache-Control: max-age=0, no-cache
➊ HTTP 请求首部:218 字节
➋ 应用静荷 15 字节({"msg":"hello"})
➌ 服务器的 204 响应:134 字节
在前面的例子中,寥寥 15 个字符的 JSON 消息被 352 字节的 HTTP 首部包裹着,全
部以纯文本形式发送——协议字节开销占 96%,而且这还是没有 cookie 的最好情
况。减少要传输的首部数据(高度重复且未压缩),可以节省相当于一次往返的延迟
时间,显著提升很多 Web 应用的性能。
Cookie 在很多应用中都是常见的性能瓶颈,很多开发者都会忽略它给每
次请求增加的额外负担。相关讨论请参见 13.1.3 节“消除不必要的请求
字节”。
11.6 连接与拼合
最快的请求是不用请求。不管使用什么协议,也不管是什么类型的应用,减少请求
次数总是最好的性能优化手段。可是,如果你无论如何也无法减少请求,那么对
HTTP 1.x 而言,可以考虑把多个资源捆绑打包到一块,通过一次网络请求获取:
• 连接
把多个 JavaScript 或 CSS 文件组合为一个文件。
• 拼合
把多张图片组合为一个更大的复合的图片。
对 JavaScript 和 CSS 来说,只要保持一定的顺序,就可以做到把多个文件连接起来
而不影响代码的行为和执行。类似地,多张图片可以组合为一个“图片精灵”,然后
使用 CSS 选择这张大图中的适当部分,显示在浏览器中。这两种技术都具备两方面
的优点。
174 | 第 11 章