通过 HTTP2 批处理请求
Batching requests over HTTP2
如果我们发出一个大的 HTTP 请求,而不是通过 HTTP2 发出多个较小的 HTTP 请求,是否有可能从我们的服务器获得更好的吞吐量。
根据我的理解,它不会在性能上产生任何显着差异,因为使用 HTTP2 我们可以在一个 TCP 连接上多路复用多个请求。
是的,在网络级别,一个大请求比多个小请求更有效率。这是由于发出网络请求的开销。
这也是为什么在 HTTP/1 下推荐连接 CSS 和 JavaScript 并为图像拼接图像的原因。1 所以发送的数据量是相同的,但是请求的数量相当低。事实上,由于 gzip 等压缩的工作方式,发送大型请求时数据量通常较小。
HTTP/2 旨在通过使用 重用单个 TCP 连接来大大降低 HTTP 请求的成本。从理论上讲,这将允许我们放弃连接和精灵。然而,现实并不完美——通常是由于浏览器效率低下而不是 HTTP/2 的错误。瓶颈刚刚移动,我们需要为新世界优化浏览器。因此,就目前而言,仍然建议进行某种程度的集中和精灵化。
回到您的问题,是的,它应该在该网络级别具有单一效果,事实上,如果您这样做,HTTP/1.1 和 HTTP/2 的性能甚至可能相似。
然而,在网络级别之外,您可能会发现其他不捆绑到更少文件中的原因。例如,如果你有一个大 JavaScript 文件,那么浏览器必须等待所有文件下载完毕,然后才能对其进行解析、编译和 运行。你最好变小,更重要的 JavaScript 先下载。与图像 spriting 类似,您可能会在显示单个图像之前等待整个 sprite 文件下载。
然后是缓存的影响。换一行JS或者在图片Sprite中添加一张图片需要新建一个大文件,旧的不能用,需要重新完整下载。
加上大文件的实施和管理会更加复杂。它们需要一个构建步骤(可能不像许多网站那样是个大问题)并且通过 CSS 创建和管理图像精灵通常更加困难。
此外,如果使用它来坚持使用 HTTP/1.1,那么您可能会错过 HTTP/2 的其他好处,包括 HPACK header compression and HTTP/2 push (though this is also more tricky to get right 而不是最初的 thought/hoped !).
It’s a fascinating topic that I’ve spent a lot of time on,最好的建议(一如既往!)是了解技术和测试,测试,测试!
如果我们发出一个大的 HTTP 请求,而不是通过 HTTP2 发出多个较小的 HTTP 请求,是否有可能从我们的服务器获得更好的吞吐量。
根据我的理解,它不会在性能上产生任何显着差异,因为使用 HTTP2 我们可以在一个 TCP 连接上多路复用多个请求。
是的,在网络级别,一个大请求比多个小请求更有效率。这是由于发出网络请求的开销。
这也是为什么在 HTTP/1 下推荐连接 CSS 和 JavaScript 并为图像拼接图像的原因。1 所以发送的数据量是相同的,但是请求的数量相当低。事实上,由于 gzip 等压缩的工作方式,发送大型请求时数据量通常较小。
HTTP/2 旨在通过使用
回到您的问题,是的,它应该在该网络级别具有单一效果,事实上,如果您这样做,HTTP/1.1 和 HTTP/2 的性能甚至可能相似。
然而,在网络级别之外,您可能会发现其他不捆绑到更少文件中的原因。例如,如果你有一个大 JavaScript 文件,那么浏览器必须等待所有文件下载完毕,然后才能对其进行解析、编译和 运行。你最好变小,更重要的 JavaScript 先下载。与图像 spriting 类似,您可能会在显示单个图像之前等待整个 sprite 文件下载。
然后是缓存的影响。换一行JS或者在图片Sprite中添加一张图片需要新建一个大文件,旧的不能用,需要重新完整下载。
加上大文件的实施和管理会更加复杂。它们需要一个构建步骤(可能不像许多网站那样是个大问题)并且通过 CSS 创建和管理图像精灵通常更加困难。
此外,如果使用它来坚持使用 HTTP/1.1,那么您可能会错过 HTTP/2 的其他好处,包括 HPACK header compression and HTTP/2 push (though this is also more tricky to get right 而不是最初的 thought/hoped !).
It’s a fascinating topic that I’ve spent a lot of time on,最好的建议(一如既往!)是了解技术和测试,测试,测试!