除了多路复用和服务器推送之外,是什么让 http/2 比 http/1 更快?
What make http/2 faster than http/1 beyond multiplexing and server push?
我能理解为什么 multiplexing
和 server push
有助于加快网页加载速度并减少服务器端的工作量。但我还了解到 binary protocol
、header compression
和 prioritization of requests
也有助于 http/2
优于 http/1
的性能改进。这三个功能实际上如何促进改进?
二进制协议
除了允许 multiplexing(这对性能有很大帮助)之外,恕我直言,这实际上没有多大帮助。是的,程序解析二进制数据包比解析文本更容易,但我认为这不会带来巨大的性能提升。正如我所说,使用二进制的主要原因是其他好处(多路复用和 header 压缩)和使解析更容易,而不是性能。
Header压缩
这可能会产生很大的潜在影响。大多数请求(和响应)重复大量数据。因此,通过压缩 headers(通过将重复的 headers 替换为跨请求的引用来工作,而不是像 HTTP body 压缩那样在请求内进行压缩)can significantly reduce the size of request (但不那么有效对于 header 通常不是总响应的重要部分的响应)。
请求的优先级
这是 HTTP/2 中更有趣的部分之一,它具有巨大的潜力但尚未优化。可以这样想:假设您有 3 个关键 CSS 文件和 3 个巨大的图像要下载。在 HTTP/1.1 下,将打开 6 个连接,所有 6 个项目将并行下载。这可能看起来不错,但这意味着不太重要的图像文件正在用完带宽,而这些带宽本可以更好地用于关键 CSS 文件。使用 HTTP/2 你可以说“首先以高优先级下载关键的 CSS,只有当它们完成后,才查看这 3 个图像文件”。不幸的是,尽管 HTTP/2 有一个优先级模型,可以根据需要进行复杂的优先级排序(有些人认为太复杂了!)browsers and servers don’t currently use it well(网站所有者和网络开发人员目前几乎没有办法影响它根本)。事实上,糟糕的优先级决定实际上会使 HTTP/2 比 HTTP/1.1 慢,因为 6 个连接的限制被解除,数百个资源可以并行下载,所有资源都在争夺相同的带宽。我怀疑在实现方面会有更多的研究和变化,但规范不需要太多变化,因为它已经允许非常复杂的优先级排序,正如我提到的那样。
几十年来,我们一直在为 HTTP/1.1 进行优化,并从中获得了很多好处。我怀疑我们还有很多东西要摆脱 HTTP/2(当它出现时 HTTP/3)。如果有兴趣了解有关此主题的更多信息,请查看我的 upcoming book。
我能理解为什么 multiplexing
和 server push
有助于加快网页加载速度并减少服务器端的工作量。但我还了解到 binary protocol
、header compression
和 prioritization of requests
也有助于 http/2
优于 http/1
的性能改进。这三个功能实际上如何促进改进?
二进制协议
除了允许 multiplexing(这对性能有很大帮助)之外,恕我直言,这实际上没有多大帮助。是的,程序解析二进制数据包比解析文本更容易,但我认为这不会带来巨大的性能提升。正如我所说,使用二进制的主要原因是其他好处(多路复用和 header 压缩)和使解析更容易,而不是性能。
Header压缩
这可能会产生很大的潜在影响。大多数请求(和响应)重复大量数据。因此,通过压缩 headers(通过将重复的 headers 替换为跨请求的引用来工作,而不是像 HTTP body 压缩那样在请求内进行压缩)can significantly reduce the size of request (但不那么有效对于 header 通常不是总响应的重要部分的响应)。
请求的优先级
这是 HTTP/2 中更有趣的部分之一,它具有巨大的潜力但尚未优化。可以这样想:假设您有 3 个关键 CSS 文件和 3 个巨大的图像要下载。在 HTTP/1.1 下,将打开 6 个连接,所有 6 个项目将并行下载。这可能看起来不错,但这意味着不太重要的图像文件正在用完带宽,而这些带宽本可以更好地用于关键 CSS 文件。使用 HTTP/2 你可以说“首先以高优先级下载关键的 CSS,只有当它们完成后,才查看这 3 个图像文件”。不幸的是,尽管 HTTP/2 有一个优先级模型,可以根据需要进行复杂的优先级排序(有些人认为太复杂了!)browsers and servers don’t currently use it well(网站所有者和网络开发人员目前几乎没有办法影响它根本)。事实上,糟糕的优先级决定实际上会使 HTTP/2 比 HTTP/1.1 慢,因为 6 个连接的限制被解除,数百个资源可以并行下载,所有资源都在争夺相同的带宽。我怀疑在实现方面会有更多的研究和变化,但规范不需要太多变化,因为它已经允许非常复杂的优先级排序,正如我提到的那样。
几十年来,我们一直在为 HTTP/1.1 进行优化,并从中获得了很多好处。我怀疑我们还有很多东西要摆脱 HTTP/2(当它出现时 HTTP/3)。如果有兴趣了解有关此主题的更多信息,请查看我的 upcoming book。