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