Page 224 - Web性能权威指南
P. 224
• 每个来源使用一个连接
HTTP 2.0 通过将一个 TCP 连接的吞吐量最大化来提升性能。事实上,在 HTTP
2.0 之下再使用多个连接(比如域名分区)反倒成了一种反模式,因为多个连接
会抵消新协议中首部压缩和请求优先级的效用。
• 去掉不必要的文件合并和图片拼接
打包资源的缺点很多,比如缓存失效、占用内存、延缓执行,以及增加应用复杂
性。有了 HTTP 2.0,很多小资源都可以并行发送,导致打包资源的效率反而更低。
• 利用服务器推送
之前针对 HTTP 1.x 而嵌入的大多数资源,都可以而且应该通过服务器推送来交
付。这样一来,客户端就可以分别缓存每个资源,并在页面间实现重用,而不必
把它们放到每个页面里了。
要获得最佳性能,应该尽可能把所有资源都集中在一个域名之下。域名分区在 HTTP
2.0 之下属于反模式,对发挥协议的性能有害:分区是开始,之后影响会逐渐扩散。
打包资源不会影响 HTTP 2.0 协议本身,但对缓存性能和执行速度有负面影响。
关于合并文件和拼接图片的负面影响,请参考 11.6 节“连接与拼合”,以
及该节中的“计算图片对内存的需求”。
类似地,把嵌入资源改为服务器推送能提升客户端的缓存性能,又不会导致额外网
络延迟(参见 12.3.7 节中的“实现 HTTP 2.0 服务器推送”)。事实上,由于 3G 和
4G 网络的往返时间更长,因而服务器推送对移动应用来说效果更明显。
HTTP 2.0 中的打包与协议开销
由于 HTTP 1.x 做不到多路复用,而且每次请求的协议开销很高,这才有了连接和
拼合等打包技术。在 HTTP 2.0 之下,多路复用已经不成问题,首部压缩也可以降
低每次 HTTP 请求要传输的元数据量,打包技术在多数情况下都不再需要了。
不过,请求开销只是减少了,并没有等于零。少数情况下,某些资源必须一块使
用,而且更新也不频繁,此时使用打包技术仍然可以提升性能。但这些情况很少
见,可以算作例外。具体措施可以通过性能度量确定。
13.3.2 双协议应用策略
遗憾的是,升级到 HTTP 2.0 不会在一夜之间完成。因此,很多应用都需要认真考
虑双协议并存的部署策略,即同一个应用既能通过 HTTP 1.x 交付,也能通过 HTTP
210 | 第 13 章