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

图 11-5:由于每个主机只能同时发起 6 个连接而导致的资源错列


                          实践中,把多个域名(如 shard1.example.com、shard2.example.com)解析
                          到同一个 IP 地址是很常见的做法。所有分区都通过 CNAME DNS 记录指
                          向同一个服务器,而浏览器连接限制针对的是主机名,不是 IP 地址。另
                          外,每个分区也可以指向一个 CDN 或其他可以访问到的服务器。

               怎么计算最优的分区数目呢?这个问题不好回答,因为没有简单的方程式。答案取决
               于页面中资源的数量(每个页面都可能不一样),以及客户端连接的可用带宽和延迟
              (因客户端而异)。实际上,我们能做的,就是在调查的基础上做出预测,然后使用固
               定数量的分区。幸运的话,多这么一点复杂性,还是能给大多数用户带来好处的。

               实践中,域名分区经常会被滥用,导致几十个 TCP 流都得不到充分利用,其中很多
               永远也避免不了 TCP 慢启动,最坏的情况下还会降低性能。此外,如果使用的是
               HTTPS,那么由于 TLS 握手导致的额外网络往返,会使得上述代价更高。此时,请
               大家注意如下几条:

               •   首先,把 TCP 利用好,参见 2.5 节“针对 TCP 的优化建议”;
               •   浏览器会自动为你打开 6 个连接;
               •   资源的数量、大小和响应时间都会影响最优的分区数目;
               •   客户端延迟和带宽会影响最优的分区数目;
               •   域名分区会因为额外的 DNS 查询和 TCP 慢启动而影响性能。

               域名分区是一种合理但又不完美的优化手段。请大家一定先从最小分区数目(不分
               区)开始,然后逐个增加分区并度量分区后对应用的影响。现实当中,真正因同时
               打开十几个连接而提升性能的站点并不多,如果你最终使用了很多分区,那么你会


               172   |   第 11 章
   182   183   184   185   186   187   188   189   190   191   192