我可以理解为什么multiplexing
和server push
有助于加快网页加载速度并减少服务器端的工作量。但是我还了解到,binary protocol
,header compression
和prioritization of requests
相对于http/2
也有助于http/1
的性能提高。这三个功能实际上对改进有何贡献?
答案 0 :(得分:3)
二进制协议
除了允许multiplexing(实际上对性能有很大帮助)之外,这实际上对IMHO并没有多大帮助。是的,与文本相比,程序解析二进制数据包更容易,但我认为这不会带来巨大的性能提升。就像我说的那样,使用二进制文件的主要原因是为了获得其他好处(多路复用和报头压缩),并使解析比性能更好。
标题压缩
这可能会产生很大的潜在影响。大多数请求(和响应)重复很多数据。因此,通过压缩标头(通过用跨请求的引用替换重复的标头而不是通过在HTTP主体压缩工作之类的请求内进行压缩来进行压缩)can significantly reduce the size of request (但对于标头通常不是总数的重要部分的响应则不是如此)响应)。
请求优先级
这是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(而且网站所有者和Web开发人员目前几乎没有办法影响它) )。实际上,由于提高了6个连接的限制并且数百个资源可以并行下载,并且都争夺相同的带宽,因此错误的优先级决策实际上会使HTTP / 2的速度比HTTP / 1.1慢。我怀疑实现方面会在这里进行更多的研究和更改,但是规范中不需要进行太多更改,因为它已经允许我提到非常复杂的优先级排序。
数十年来,我们一直在针对HTTP / 1.1进行优化,并从中挤出了很多东西。我怀疑我们还有很多要摆脱HTTP / 2(以及随之而来的HTTP / 3)的问题。如果有兴趣了解有关此主题的更多信息,请查看我的upcoming book。