【发布时间】:2018-04-05 02:21:06
【问题描述】:
我正在我的网站上实现 HTTP/2 推送。让它工作后,我对我得到的瀑布有点惊讶。我在 Chrome 中启用了“Slow 3G”的节流功能,以更准确地查看正在发生的事情。
我正在推送 4 个资产(按此顺序):
- home.min.css (12kB)
- front_layout.css (213kB)
- front_home.css (8kB)
- front_layout.js (360kB)
这是我在加载过程中得到的: 你可以看到我推送的两个最大的文件是“Pending”。我可以理解这一点,因为即使是主要的 HTML 文档还没有完成加载。但问题是其他非推送资产(下面的 2 张图片)已经加载!推送的资产如何尚未开始加载,而未推送的资产已完成加载?
请注意,推送资产的蓝色部分定义为“阅读推送”,而旧样式请求的蓝色部分定义为“内容下载”。会不会是 Chrome Inspector 的绘图错误?还是我看不懂的内容下载和阅读推送的细微差别?
让我们稍后再看加载,更令人惊讶的是: 在主 HTML 文档的结尾和一个推送资产的开始之间有一个奇怪的延迟。在我看来,推送的资产会在主要响应数据之后立即出现,我不明白这约 8 秒的延迟是从何而来的。我错过了什么?
所以:
- 大型推送资产在其他非推送资产之后开始下载
- (最后一行)另一个域上的一个大图像(340kB,与我的大型推送资产相同)在我推送的资产之前完成加载(尽管下载速度较慢)。
我得到了与 Fast 3G 相同的图表。只有当我完全禁用节流(在我自己的机器上运行)时,我才能得到我所期望的:
我对发生的事情感到困惑。 HTTP2 推送对我来说是件好事吗?
我阅读了很多关于 http2 是如何工作的文章,但我真的不明白我的情况发生了什么。欢迎任何见解!
非常感谢!
【问题讨论】:
-
如果你问我,这看起来像是一个实施问题。您是否正在运行最新版本的网络服务器和 Chrome? HTTP/2 如此新,不幸的是存在一些实现问题。
-
你有没有找到这个的根本原因?我正在分析一个网站在较慢的网络上的速度,我发现它的行为非常相似。
-
不幸的是,我没有找到对此的解释。如果你这样做,我仍然有兴趣。谢谢。
标签: http http2 server-push