写点什么

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

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

关注

评论

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

Garden Planner for Mac(园林绿化设计软件) v3.8.58注册激活版

iMac小白

基于 Fluid+JindoCache 加速大模型训练的实践

阿里巴巴云原生

阿里云 云原生 Fluid

A Comprehensive Guide IPQ5018-IPQ6010-IPQ6018-IPQ8072-IPQ8074

wallyslilly

IPQ6010 ipq6018 IPQ8072

不懂技术也能轻松搭建网站!美国虚拟主机的简易指南!

一只扑棱蛾子

虚拟主机 美国虚拟主机

Aiseesoft AnyCoord for Mac(GPS虚拟定位软件) v1.0.36激活版

iMac小白

Web3.0区块链技术开发方案:mint铭文铭刻制度开发

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

2024年API经济的十大预测

幂简集成

API API经济

graphpad prism for Mac(专业医学绘图工具) v10.2.0激活版

iMac小白

测试管理进阶 | 量力而行:避免成为替罪羊

测试人

软件测试 测试开发 测试管理

AI给我们带来哪些方面惊喜呢?

小齐写代码

即时通讯技术文集(第33期):IM开发综合技术合集(Part6) [共12篇]

JackJiang

网络编程 即时通讯 IM

深耕人工智能技术创新,天翼云荣获AAAI 2024竞赛冠军

编程猫

墨天轮2023年度数据库获奖名单

墨天轮

数据库 opengauss oceanbase 达梦 polarDB

6个受欢迎的 Angular 库

伤感汤姆布利柏

Metasequoia 4 for Mac(水杉3D建模器) v4.8.6e激活版

iMac小白

分享6个当下最受欢迎的 Vue UI 库

伤感汤姆布利柏

网络技术探析:SDN、SD-WAN、CDN和SDH的关联与演进

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

Google Adsense探索系列_第二弹(成功通过审核)

fkys

网站 Google 审核 adsense

华为云软件开发生产线CodeArts前端DevOps实践

华为云PaaS服务小智

云计算 软件开发 华为云

JavaScript 的新数组分组方法

EquatorCoco

JavaScript 数组 开发语言

真香!NineData SQL 开发全面适配 GaiaDB

NineData

数据库 百度云 数据源 NineData GaiaDB

金芮学院派的优秀践行者

Geek_2d6073

万界星空科技电子机电行业MES系统,2000元/年起

万界星空科技

制造业 mes 电子 电子mes 电子行业

什么是DevOps

华为云PaaS服务小智

DevOps 软件开发

SD-WAN如何降低运维成本、简化运维工作?

Ogcloud

SD-WAN 企业网络 SD-WAN组网 SD-WAN服务商 SDWAN

专精特新“广东造” | 华大北斗:从“芯”出发 挺起产业“脊梁”

江湖老铁

Native Instruments Kontakt 7 for Mac v7.8.1激活版下载

iMac小白

【线上直播】KaiwuDB 分布式系统 Range Split & Merge 原理详解

KaiwuDB

数据库 数据分区

听 GPT 讲 client-go 源代码 (11)

fliter

听 GPT 讲 client-go 源代码 (12)

fliter

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