本文参考 High Performance Browser Networking,获取更多详细内容请查看原文。
网络性能的关键:HTTP协议
在讨论HTTP/1.0的优化时,简单的建议便是:所有用户应尽快升级至HTTP/1.1。如此简单的议程结束。
提升HTTP服务性能是HTTP/1.1开发小组的核心使命之一,这一标准带来了众多必要的性能增强和新特性,其中一些最为人熟知的包括:
- 支持持久连接以便于连接的重复使用
- 支持分块传输编码,有效流式响应
- 请求流水线化,允许多请求同时处理
- 字节服务,更灵活的资源请求方式
- 更优秀的缓存管理机制和规范
这份清单并不全面,专门讨论HTTP/1.1各项改进的细节,足以出书一本。建议查看David Gourley与Brian Toty的《HTTP:权威指南》。此外,Steve Souders的《高性能网站》也提供了宝贵的14条建议,其中有一半都聚焦于网络优化。
高效网络优化的十大原则:
-
降低DNS解析次数。
-
减少不必要的HTTP请求,以消除延迟。
-
利用内容分发网络(CDN),将数据放在离用户更近的地方。
-
添加过期头和配置ETag,优化资源缓存机制。
-
使用Gzip压缩文本资源,节省带宽。
-
避免HTTP重定向,防止不必要的延迟。
上述建议仍然具有适用性,尤其是强调减少网络延迟并降低传输数据量的两大基石。在任何应用程序中,这两项优化都是永恒的。
然而,并非所有HTTP/1.1的特点和最佳实践都得到充分利用。某些特性由于缺乏支持而未能实现其预期的效果,开发者们因此创造了许多“土制”的优化方案,如域分片、连接精灵等。
持久连接的优势
HTTP/1.1引入的一个显著的性能改进便是持久连接,其指的是可以重用TCP连接的能力。这是推动我们性能策略的重要部分。举个简单的例子,假设我们在同一TCP连接上需要请求两个小资源,这种情况下,我们只需一次TCP三次握手来完成连接,而每个请求也将相应节省往返延迟。
通过使用持久连接,我们可以在一定程度上消除额外的TCP连接延迟,节省了处理时间与成本。
HTTP流水线化
持久连接允许多个请求在同一连接上顺序发送,但这种顺序处理限制了效率。HTTP流水线则是这种流程的一种增强,它允许在服务端并行处理请求,从而减少延迟。通过这一优化设计,我们能显著降低每个请求的总响应时间。
然而,HTTP流水线的有效推行受到多种因素的制约,HTTP/1.x 协议在响应的严格序列化上带来了局限性,无法实现数据的多路复用,这影响了整体性能的提高。
多个TCP连接的挑战
由于HTTP/1.x不支持多路复用,因此必须利用多个TCP连接来提高并行请求的效率。虽然每个主机上通常会最大限度地保持六个并发连接,但这势必会导致额外的资源消耗及带宽竞争。虽然开设多个连接可以提高并发处理的能力,但它也带来了实施上的复杂性和更高的运营成本。
域分片
为了解决HTTP/1.x下的连接限制,浏览器开发者们常常通过在不同的子域名上分散资源请求来提高并发性能。虽然这可以直接增加并行请求数,但同时也会带来额外的DNS解析时间和处理开销。
因此,在进行域分片时需要慎重考虑,过度使用可能反而拖慢请求效率。
结论
在性能优化的众多策略中,合理运用以上技巧能够为网络应用带来显著提升。然而,为应用程序选择合适的优化策略除了需要技术知识外,还需细致的测试与衡量。对每个优化措施进行深入分析,结合实际使用背景,找出最佳解决方案,才能有效改善性能。