写点什么

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:164219
用户头像

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

关注

评论

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

鸿蒙轻内核定时器Swtmr:不受硬件和数量限制,满足用户需求

华为云开发者联盟

鸿蒙 定时器 OpenHarmony LiteOS-M 软件定时器

十大自动化测试工具,你在用哪些?

禅道项目管理

测试 自动化测试

初学者入门知识图谱必看的能力:推理

华为云开发者联盟

知识图谱 图谱 推理 知识推理 知识纠错

模块三:学生管理系统架构详细设计

柱林

深入浅出Node.js第一章阅读总结

Alex

JavaScript node.js

Vue进阶(幺捌陆):异步请求导致页面数据渲染错误问题解决

No Silver Bullet

Vue 异步请求 7月日更 $set

技术人生第5篇——浅谈如何成为技术一号位?

阿里巴巴中间件

云计算 阿里云 云原生 中间件 技术人生

架构实战营 毕业设计

netspecial

架构实战营

智汇华云 | Wireguard VPN 介绍与使用

华云数据

悲剧!IDEA 突然找不到类了?

楼下小黑哥

Java 后端 IDEA

如何用Camtasia给视频添加字幕?

淋雨

视频剪辑 Camtasia 录屏软件

测评EasyRecovery的数据恢复效果与多种功能

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

矿机矿池挖矿系统开发

获客I3O6O643Z97

挖矿矿池系统开发案例 PHA矿机挖矿

架构实战营模块三作业

tt

架构实战营

【架构训练营】模块三作业

zclau

OPPO小布助手算法系统的探索、实践与思考

OPPO小布助手

人工智能 深度学习 对话 智能助手 智能对话

抖音引流获客APP系统开发

获客I3O6O643Z97

抖音霸屏 抖音、快手获客系统

Load and preprocess images

毛显新

Python 深度学习 tensorflow 计算机视觉

Python OpenCV 学习轻松点,复习一下模板匹配吧

梦想橡皮擦

Python 7月日更

顶级高手改变模型|靠谱点评

无量靠谱

告别尴尬-找回MySQL数据库密码

龙眼果

MySQL

未雨绸缪最好,亡羊补牢也行|靠谱点评

无量靠谱

NumPy之:多维数组中的线性代数

程序那些事

Python 数据分析 Numpy 程序那些事

模块3作业“学生管理系统”架构设计

王小森

模块三 作业

SAKIN

架构实战营模块 3 作业

zlz

Vue进阶(幺玖肆):keep-alive 实现页面缓存

No Silver Bullet

Vue 7月日更 keep-alive 动态组件

架构实战营 - 模块 3 - 作业

Vincent

#架构实战营

模块三作业

VE

架构实战营

Tensorflow小技巧(一)

毛显新

Python tensorflow pandas

带你探索CPU调度的奥秘

华为云开发者联盟

cpu 操作系统 工作负载 调度器 调度

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