【问题标题】:Does concatenation reduce the amount of headers in HTTP2?连接是否会减少 HTTP2 中的标头数量?
【发布时间】:2018-06-21 19:55:39
【问题描述】:

我读到 HTTP2 消除了对 JavaScript 文件连接的需要,因为多 -> 单连接更改。

但是连接仍然不会减少发送的标头数量吗?如果发送了单独的文件,不是每个文件都带有自己的一组标题吗?

使用连接只会发送一组标头。

那么串联仍然会产生很小的影响吗?

【问题讨论】:

  • 最小。另外,由于 HTTP/2 增加了标头压缩,甚至更小。
  • 对 - 所以你需要亚马逊或谷歌的流量才能产生重大影响......?
  • 主要问题是单个用户需要多长时间才能加载显示您的页面所需的所有资产。无论是单个用户,还是数千个用户 - 它有什么区别? // 连接通常涉及妥协——比如这个特定的脚本/样式表只用在所有页面的 x% 上,但无论如何我们都将它包含在通用聚合文件中,以便我们只有其中一个要为 all 页面等。不连接允许您仅加载特定页面需要开始的资产。

标签: javascript minify http2


【解决方案1】:

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

在 HTTP/2 下,标头使用 HPACK 进行压缩。这会构建一个标头表,然后在具有相同标头的未来请求中引用这些标头,因此不会再次发送完整的标头,而只是对前一个标头的小得多的引用。

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

连接的原因:

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

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

不连接的原因:

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

    李>
  • 同样在缓存方面,如果不连接,然后更改1.js,您可能仍然可以使用缓存中的2.js3.js。以前,用户必须重新下载完整的 all.js 文件才能更改任何代码。

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

在我看来,HTTP/2 让事情变得非常有趣,并可能导致 Web 性能优化 (WPO) 发生大量变化。

【讨论】:

  • 使用连接的另一个原因是谷歌机器人仍然使用 HTTP/1.1 进行爬取
猜你喜欢
  • 2013-10-13
  • 2019-06-17
  • 2020-08-02
  • 2021-01-12
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多