【问题标题】:HTTP2 Delay in pushed assets compared to non-pushed ones与非推送资产相比,推送资产的 HTTP2 延迟
【发布时间】:2018-04-05 02:21:06
【问题描述】:

我正在我的网站上实现 HTTP/2 推送。让它工作后,我对我得到的瀑布有点惊讶。我在 Chrome 中启用了“Slow 3G”的节流功能,以更准确地查看正在发生的事情。

我正在推送 4 个资产(按此顺序):

  1. home.min.css (12kB)
  2. front_layout.css (213kB)
  3. front_home.css (8kB)
  4. front_layout.js (360kB)

这是我在加载过程中得到的: 你可以看到我推送的两个最大的文件是“Pending”。我可以理解这一点,因为即使是主要的 HTML 文档还没有完成加载。但问题是其他非推送资产(下面的 2 张图片)已经加载!推送的资产如何尚未开始加载,而未推送的资产已完成加载?

请注意,推送资产的蓝色部分定义为“阅读推送”,而旧样式请求的蓝色部分定义为“内容下载”。会不会是 Chrome Inspector 的绘图错误?还是我看不懂的内容下载和阅读推送的细微差别?

让我们稍后再看加载,更令人惊讶的是: 在主 HTML 文档的结尾和一个推送资产的开始之间有一个奇怪的延迟。在我看来,推送的资产会在主要响应数据之后立即出现,我不明白这约 8 秒的延迟是从何而来的。我错过了什么?

在页面加载时,这是我得到的:

所以:

  1. 大型推送资产在其他非推送资产之后开始下载
  2. (最后一行)另一个域上的一个大图像(340kB,与我的大型推送资产相同)在我推送的资产之前完成加载(尽管下载速度较慢)。

我得到了与 Fast 3G 相同的图表。只有当我完全禁用节流(在我自己的机器上运行)时,我才能得到我所期望的:

我对发生的事情感到困惑。 HTTP2 推送对我来说是件好事吗?

我阅读了很多关于 http2 是如何工作的文章,但我真的不明白我的情况发生了什么。欢迎任何见解!

非常感谢!

【问题讨论】:

  • 如果你问我,这看起来像是一个实施问题。您是否正在运行最新版本的网络服务器和 Chrome? HTTP/2 如此新,不幸的是存在一些实现问题。
  • 你有没有找到这个的根本原因?我正在分析一个网站在较慢的网络上的速度,我发现它的行为非常相似。
  • 不幸的是,我没有找到对此的解释。如果你这样做,我仍然有兴趣。谢谢。

标签: http http2 server-push


【解决方案1】:

我还注意到我的 index.html 和推送的资源之间存在一个神秘的差距。 index.html 的蓝色条的末尾是浏览器完成下载文件的时间。然后它需要解析 HTML,一旦它遇到需要推送资源的点,它就会开始请求它。所以我猜这个差距是让浏览器解析 HTML 并做一些背景工作(例如加载 HTML,分配空间......)

我不确定这是否是正确的解释,但希望它可以给您一些见解(经过这么长时间......或者如果您确实找到了答案,请分享它!谢谢)

【讨论】:

    猜你喜欢
    • 2021-10-20
    • 2017-12-13
    • 1970-01-01
    • 2020-01-07
    • 2019-04-27
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多