连接是否减少了 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.js
、2.js
和 3.js
),并且通常发送一个合并的 javascript 文件(例如 all.js
) .现在,在 HTTP/2 下,不连接的惩罚没有那么严重,所以你只能发送你需要的东西。因此,如果一个页面只需要 1.js
和 3.js
,并且只发送它们,那么您可以通过不发送 2.js
(以及浏览器端的处理!)来节省字节。当然,这也可以在 HTTP/1.1 下完成,如果您还创建了一个 1_and_3.js
文件,但创建所有串联组合可能不值得付出努力,而不串联实际上节省了构建步骤。
同样在缓存端,如果不concatenate,然后改成1.js
,可能还是可以用2.js
和3.js
从缓存。以前,用户必须再次下载完整的 all.js
文件才能更改任何代码。
所以没有明确的答案,但根据我的经验,我们会减少连接(基本上是功能包),但不会完全消除它。
在我看来,HTTP/2 让事情变得非常有趣,并可能导致 Web 性能优化 (WPO) 发生很多变化。
我读到 HTTP2 不再需要 JavaScript 文件串联,因为多连接 -> 单连接发生了变化。
但是串联不会减少发送的 headers 数量吗?如果发送的是单独的文件,那么每个文件是否都带有自己的一组 headers?
只有一组 headers 会被发送。
那么串联仍然会有很小的不同吗?
在 HTTP/1 下。1 是的,这会有所帮助。
在 HTTP/2 header 下使用 HPACK 进行压缩。这构建了 header 的 table,然后在以后的请求中使用相同的 header 引用,因此不会再次发送完整的 header,而只是一个更小的引用到上一个 header.
但是,还有其他几点需要考虑。
连接原因:
Body 压缩(例如 Gzip)在更大的资源上效果更好,因此连接可能意味着传输的字节更少。
浏览器发出额外请求仍然存在开销。无论是创建请求、发送请求、解析请求……等等。在 HTTP/2 下网络影响减少了,但串联仍然有好处。
不连接的原因:
如果您只发送您需要的资源,那么可能会节省开支。例如。假设您有三个 javascript 文件(
1.js
、2.js
和3.js
),并且通常发送一个合并的 javascript 文件(例如all.js
) .现在,在 HTTP/2 下,不连接的惩罚没有那么严重,所以你只能发送你需要的东西。因此,如果一个页面只需要1.js
和3.js
,并且只发送它们,那么您可以通过不发送2.js
(以及浏览器端的处理!)来节省字节。当然,这也可以在 HTTP/1.1 下完成,如果您还创建了一个1_and_3.js
文件,但创建所有串联组合可能不值得付出努力,而不串联实际上节省了构建步骤。同样在缓存端,如果不concatenate,然后改成
1.js
,可能还是可以用2.js
和3.js
从缓存。以前,用户必须再次下载完整的all.js
文件才能更改任何代码。
所以没有明确的答案,但根据我的经验,我们会减少连接(基本上是功能包),但不会完全消除它。
在我看来,HTTP/2 让事情变得非常有趣,并可能导致 Web 性能优化 (WPO) 发生很多变化。