写点什么

HTTP/2 推送之难,远超想象

  • 2017-06-11
  • 本文字数:11023 字

    阅读完需:约 36 分钟

在讨论页面加载性能问题时,我经常听到有人说“HTTP/2 推送可以解决这问题”,但我对这个技术的了解不多,于是打算深入研究一下。

HTTP/2 推送远比我最初想象中更复杂,也更底层,但最让我措手不及的地方在于,这种技术在不同浏览器上的表现竟然有这么大的差别,本来我还觉得这技术已经足够成熟,可以在生产环境中使用了。

本文并不是那种认为“HTTP/2 推送一无是处”的吐槽文。我觉得 HTTP/2 推送真的很强大,以后还会更加完善,但并不算能解决所有问题的万灵药。

完整的 Fetch 路径

在页面和目标服务器间,横亘着一系列可能拦截请求的缓存和其他机制:

当人们希望尝试或向别人解释 Git 或其他看得见的东西时,通常会使用类似上面这样的流程示意图,在本来就懂的人看来,这样的示意图一目了然,但不懂的人往往会一头雾水。如果你也有这种感觉,那要先说声抱歉了!希望下文能帮你更好地理解。

HTTP/2 推送的工作原理

  • 页面:嘿 example.com,能把你的首页让我看一看吗?
  • 服务器:没问题!哦,在我给你发送首页的同时,还需要发送一些样式表、图片、JavaScript,以及一些 JSON。
  • 页面:额,好的。
  • 页面:我已经看到 HTML 了,但貌似还需要一个样式……哦,好像你已经发过来了,酷!

服务器响应请求时,可以顺便包含额外的资源。例如包含一系列请求报头,这样稍后浏览器就知道如何匹配不同报头。这些额外的资源位于缓存中,当浏览器请求的资源与缓存中的匹配时即可直接从缓存中获取。

这种方法可以改善性能,原因在于可以提前发送可能需要的资源,而不需要等待浏览器索取,因此可以提高页面加载速度。

多年来我对 HTTP/2 推送的了解仅限于此,听起来挺简单,但魔鬼往往隐藏在细节中……

任何东西都可以使用推送缓存

HTTP/2 推送是一种底层网络功能,用到网络栈的任何东西都可以使用该功能。但只有确保一致性以及可预测性,才能发挥最大作用。

我试着推送一些资源,并通过下列方式收集:

  • fetch()
  • XMLHttpRequest
2017-06-11 17:164519
用户头像

发布了 283 篇内容, 共 116.6 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

功能有更新 | Bonree ONE 权限版本新增环境、资源域、角色概念

博睿数据

极狐GitLab CI/CD 变量黑魔法之预定义变量

极狐GitLab

DevOps 镜像 CI/CD pipeline

强大的录屏截图标注工具:CleanShot X激活最新版

胖墩儿不胖y

Mac软件 屏幕截图工具 屏幕录屏软件

如何找到数据资产入表的破局点,听听用友怎么说

用友BIP

数据资产入表

云原生之旅:一年的变革、成长与启示

熬夜磕代码、

3D模型材质丢失怎么办?

3D建模设计

3D渲染 材质贴图 材质编辑

简单之道

Tony Bai

golang 设计 Google Rob Pike Go 语言

2023年终盘点系列| 用友BIP持续迭代,进化发展

用友BIP

Mint Blockchain 2024 年发展路线图和开发计划

NFT Research

区块链 NFT Layer 2

Wireshark使用技巧

小齐写代码

浪潮云连续2年跻身中国分布式云市场领导者象限

云计算 数据云

30 | 图的表示:如何存储微博、微信等社交网络中的好友关系

鲁米

聊点写标题那点破事儿

6点无痛早起学习的和尚

写作 21 天技术人写作行动营 标题

上海国家会计学院第六届智能财务高峰论坛成功举办

用友BIP

智能财务

软件测试/测试开发/人工智能丨人工智能是否会取代软件测试工程师

测试人

人工智能 软件测试

分布式基础概念-消息中间件[RabbitMQ]

派大星

Java 面试题

Databend 开源周报第 123 期

Databend

融合事项会计与用友BIP商旅及费控:提升企业运营效率和透明度

用友BIP

商旅费控 事项会计

低多边形植物模型法线贴图

3D建模设计

3D渲染 材质贴图 纹理贴图 材质纹理 材质编辑

如何为3D模型导入材质贴图

3D建模设计

3D渲染 纹理贴图 材质编辑

用友发布数智化转型成熟度评价体系,加速国有企业转型

用友BIP

企业数智化

2023年度总结——我是如何利用AI高效完成学习与工作任务的

小王撤了

AI

入选首个开源贡献世纪榜,TDengine 亮相 FICC 开源计算机系统大会

TDengine

tdengine 时序数据库

注册中心元数据的应用

姚秋实(Nacol)

Java 架构 配置中心 元数据 metadata

Go未来演进:基于共同目标和数据驱动的决策

Tony Bai

golang 编程语言 Go 语言 gopher

app开发

Geek_8da502

大算力与大模型的融合之力

百度开发者中心

nlp 大模型

人人都能用的AI编程助手 CodeGeeX

凌览

AI 前端 后端 AIGC

落地设备备件按单采购,助力光伏单晶行业数智化管理

用友BIP

光伏单晶行业 数智化管理

HTTP/2推送之难,远超想象_Google_Jake Archibald_InfoQ精选文章