Page 221 - Web性能权威指南
P. 221
的结果,则是完全不用 cookie。比如,在请求图片、脚本和样式表等静态资源时,
浏览器绝大多数情况下不必传输特定于客户端的元数据。
在使用 HTTP 1.x 的情况下,可以指定一个专门的“无需 cookie”的来源服
务器。这个服务器可以用于交付那些不区分客户端的共用资源。
13.1.4 并行处理请求和响应
为了让应用响应速度达到最快,应该尽可能第一时间就分派所有资源请求。可是,
还有一点也要考虑到,那就是所有这些请求以及它们对应的响应,将会被服务器如
何处理。如果我们的请求在服务器上按先来后到的顺序依次排队,那就又会导致不
必要的延迟。要是想实现最佳性能,就要记住以下几点:
• 使用持久连接,从 HTTP 1.0 升级到 HTTP 1.1;
• 利用多个 HTTP 1.1 连接实现并行下载;
• 可能的情况下利用 HTTP 1.1 管道;
• 考虑升级到 HTTP 2.0 以提升性能;
• 确保服务器有足够的资源并行处理请求。
如果不使用持久连接,则每个 HTTP 请求都要建立一个 TCP 连接。由于 TCP 握手
和慢启动,多个 TCP 会造成明显的延迟。在使用 HTTP 1.1 的情况下,最好尽可能
重用已有连接。如果碰上能使用 HTTP 管道的机会,不要放过。更好的选择,则是
升级到 HTTP 2.0,从而获得最佳性能。
识别造成客户端和服务器延迟的不必要资源既是艺术也是技术:要仔细检查客户端
资源瀑布(参见 10.2.2 节“分析资源瀑布”),以及服务器日志。常见问题如下:
• 服务器资源不足,造成不必要的资源处理延迟;
• 代理及负载均衡器容量不足,造成向应用服务器交付请求的延迟(请求排队);
• 客户端资源阻塞导致页面构建延迟,参见 10.1 节的“DOM、CSSOM 和 JavaScript”。
优化浏览器中的资源加载
浏览器会自动确定文档中每个资源的最优加载顺序,但我们可以为浏览器提供辅
助,也可以给它帮倒忙:
• 可以为浏览器给出提示,参见 10.5 节“针对浏览器的优化建议”;
• 可以通过藏匿资源来干扰浏览器。
优化应用的交付 | 207