连接是否减少了 HTTP2 中 headers 的数量?

Does concatenation reduce the amount of headers in HTTP2?

我读到 HTTP2 不再需要 JavaScript 文件串联,因为多连接 -> 单连接发生了变化。

但是串联不会减少发送的 headers 数量吗?如果发送的是单独的文件,那么每个文件是否都带有自己的一组 headers?

只有一组 headers 会被发送。

那么串联仍然会有很小的不同吗?

在 HTTP/1 下。1 是的,这会有所帮助。

在 HTTP/2 header 下使用 HPACK 进行压缩。这构建了 header 的 table,然后在以后的请求中使用相同的 header 引用,因此不会再次发送完整的 header,而只是一个更小的引用到上一个 header.

但是,还有其他几点需要考虑。

连接原因:

  • Body 压缩(例如 Gzip)在更大的资源上效果更好,因此连接可能意味着传输的字节更少。

  • 浏览器发出额外请求仍然存在开销。无论是创建请求、发送请求、解析请求……等等。在 HTTP/2 下网络影响减少了,但串联仍然有好处。

不连接的原因:

  • 如果您只发送您需要的资源,那么可能会节省开支。例如。假设您有三个 javascript 文件(1.js2.js3.js),并且通常发送一个合并的 javascript 文件(例如 all.js) .现在,在 HTTP/2 下,不连接的惩罚没有那么严重,所以你只能发送你需要的东西。因此,如果一个页面只需要 1.js3.js,并且只发送它们,那么您可以通过不发送 2.js(以及浏览器端的处理!)来节省字节。当然,这也可以在 HTTP/1.1 下完成,如果您还创建了一个 1_and_3.js 文件,但创建所有串联组合可能不值得付出努力,而不串联实际上节省了构建步骤。

  • 同样在缓存端,如果不concatenate,然后改成1.js,可能还是可以用2.js3.js从缓存。以前,用户必须再次下载完整的 all.js 文件才能更改任何代码。

所以没有明确的答案,但根据我的经验,我们会减少连接(基本上是功能包),但不会完全消除它。

在我看来,

HTTP/2 让事情变得非常有趣,并可能导致 Web 性能优化 (WPO) 发生很多变化。