速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

探索 Xind3 生态系统,解锁铭文资产的新玩法

股市老人

域名型通配符ssl证书_通配符SSL证书是否支持三级子域名?

智慧源点

SSL证书

《深入理解Java虚拟机(第3版)》PDF

程序员李木子

C# 继承、多态性、抽象和接口详解:从入门到精通

小万哥

C# 程序人生 编程语言 软件工程 后端开发

还在Show me the code?Show xUnit了!

赫杰辉

后端 低代码 可视化 流程图

借助SSL/TLS和NGINX进行Web流量加密教程

百度搜索:蓝易云

nginx Linux Web TLS ssl

《Spring微服务实战(第2版)》PDF

程序员李木子

时间贫困改运指南

少油少糖八分饱

时间 阅读 复利 时间贫困 行动

放个烟花迎接龙年春节吧

南城FE

JavaScript 前端 canvas

什么是URL重写?

百度搜索:蓝易云

云计算 Linux 运维 url 云服务器

文心一言 VS 讯飞星火 VS chatgpt (188)-- 算法导论14.1 5题

福大大架构师每日一题

福大大架构师每日一题

【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现

洛神灬殇

RocketMQ 性能优化 消息队列 吞吐提升 2024年第二十四篇文章

网站卡顿、打不开是不是服务器被攻击了?

德迅云安全杨德俊

体育赛事直播平台开发哪些互动功能有助于争夺体育流量

软件开发-梦幻运营部

2024-01-27:用go语言,阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有N堆金币, 第i堆金币的总重量和总价值分别是m[i]、v[i], 阿里巴巴有一个承重量为T的背包,但并不一定有办法将全部的

福大大架构师每日一题

福大大架构师每日一题

缺少铭文轨道叙事?看看 Xdin3 如何打破僵局

股市老人

1.2MHz,固定频率白光LED驱动器

梦笔生花

NGINX负载均衡加权轮询算法配置详解

百度搜索:蓝易云

nginx 云计算 Linux 运维 云服务器

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