写点什么

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

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

关注

评论

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

传承敬老美德,志愿服务伴我行

科技热闻

软件测试/测试开发丨Pytest配置文件pytest.ini

测试人

Python 程序员 软件测试 测试开发 pytest

分享实录 | NGINX 网络协议优化(下)

NGINX开源社区

nginx TCP TLS HTTP

基于袋鼠云实时开发平台开发 FlinkSQL 任务的实践探索

袋鼠云数栈

sql flink 实时开发

华为云GaussDB圈层活动走进香港,赋能金融政企数字化转型

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

SpringBoot 3.0来了,你准备好了吗? | 社区征文

bug菌

后端 年中技术盘点

用友iuap:社会级数智化底座,助力企业实现国产替代

用友BIP

国产替代

开源项目推荐 【SkyEyeSystem】

程序员阿杜

Java 爬虫 springboot

工业软件芯片国产化:数智化自主可控的重要保障

用友BIP

国产替代

KaiwuDB 获 2023 可信数据库发展大会“双料”荣誉

KaiwuDB

KaiwuDB 2023可信数据库发展大会

什么是GPU与CPU?有什么不同?哪个更好?

Finovy Cloud

生成式AI下的企业:是不是该成立新部门封新官了?

FinClip

基于Web的智慧交通3D可视化系统

2D3D前端可视化开发

智慧交通 智慧交通系统 智能运输系统 ITS 智慧公交

5G与妈祖守护的那片海

脑极体

5G

美团面试真题和答案

王磊

java面试

全面数字化业务时代亟需升级企业数智底座

用友BIP

数智底座

使用 Navicat 的数据生成插入大量测试数据

hungxy

超燃!用友大易走进晨光,探索人才管理创新之道

用友BIP

招聘

国内数据库第一梯队!柏睿数据RapidsDB通过“可信数据库”评测

新消费日报

如何理解低代码平台的定制化服务?

互联网工科生

低代码 软件定制

污点分析是什么神奇的代码检查技术?

华为云PaaS服务小智

云计算 华为云 华为开发者大会2023 代码检查

人脸识别技术在智能家居中的应用

数据堂

从GaussDB(DWS)的技术演进,看数据仓库的积淀与新生

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

软件测试/测试开发丨Python闭包函数和计时器学习笔记

测试人

Python 程序员 软件测试 函数

大型企业全面预算管理该何去何从?

用友BIP

全面预算

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