10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

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

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

关注

评论

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

PostgreSQL:您可能需要增加MAX_LOCKS_PER_TRANSACTION

PostgreSQLChina

数据库 postgresql 开源

阿里开发10年,全部心血汇聚成到这份文档里,拿到30W的offer没问题

Java架构之路

Java 程序员 架构 面试 编程语言

“区块链+社会治理”模式获居民点赞

CECBC

区块链 区块链投票

比特币10年:从2个披萨涨到2万美金,背后的三个“神秘人”

CECBC

比特币

软件测试(功能、接口、性能、自动化)详解

测试人生路

软件测试

倍频程与钢琴调式的距离

阿里云CloudImagine

音频技术 音频

OPPO小布助手正在改变普罗米修斯的世界

脑极体

GitHub上3天1W赞的程序员学习路线!入门进阶都非常实用

Java架构之路

Java 程序员 架构 面试 编程语言

TypeScript | 第二章:类、接口和之间的关系

梁龙先森

typescript 大前端 七日更

由于不知线程池的bug,某Java程序员叕被祭天

Java架构师迁哥

英特尔宋继强:迈向可持续的千倍速计算未来

E科讯

脑洞:如何用一个整数来表示一个列表?

Python猫

Python

架构师训练营W10作业

Geek_f06ede

神比喻:低代码开发像自动驾驶汽车,零代码开发像无人驾驶汽车!

J2PaaS低代码平台

程序员 软件 开发者 低代码 开发工具

Reactive Spring实战 -- 理解Reactor的设计与实现

binecy

reactor Reactive SpringBoot 2

MSHA x Chaos 容灾高可用实践

阿里巴巴云原生

数据库 高可用 云原生 中间件 容灾

2020,谁是中国ToB行业最有影响力的企业?

ToB行业头条

App性能测试揭秘(Android篇)

移动研发平台EMAS

阿里云 软件测试 测试 性能测试 云性能测试

测开之函数进阶· 第2篇《纯函数》

清菡软件测试

测试开发

量化交易系统开发搭建案例

薇電13242772558

区块链 策略模式

大众汽车“芯片荒”,折射汽车芯片的漫漫“自主替代”路

脑极体

volatile,synchronized可见性,有序性,原子性代码证明(基础硬核)

叫练

volatile 多线程 synchronized 原子性 指令

大连市税务局局长赵福增:用区块链打破部门间“信息孤岛”

CECBC

区块链 汽车

阿里架构师478页Java工程师面试知识解析笔记pdf,一份2021年通往阿里的面试指南

Java架构之路

Java 程序员 架构 面试 编程语言

云服务的可服务性经典6问

华为云开发者联盟

服务 计算

距离 Java 开发者玩转 Serverless,到底还有多远?

阿里巴巴云原生

Java Serverless 微服务 云原生 中间件

编程之美!从线程池状态管理来看二进制操作之美

Geek Tech

Java 源码分析 线程池

【Java入门】流

Albert

Java 七日更

学透这份300页的2020最新java面试题及答案,一线大厂offer随便拿

Java架构之路

Java 程序员 架构 面试 编程语言

LeetCode题解:55. 跳跃游戏,贪心,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

大作业1

龙卷风

架构师一期

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