写点什么

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

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

关注

评论

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

阿里云EMAS旗下低代码平台Mobi开放定向内测

移动研发平台EMAS

阿里云 低代码 公有云 研发工具 全端

区块链合约安全系列(一)公链合约权限校验引发的严重安全问题

BSN研习社

区块链

恒源云(Gpushare)_模块化oss数据上传小技巧

恒源云

深度学习 GPU服务器

【今晚19点】关于论文复现赛,你想知道的都在这里啦!

OpenI启智社区

PaddlePaddle 论文复现

架构训练营模块九作业

Geek_16d2b8

架构训练营

Selenium自动化应该避免的测试场景

FunTester

精巧的Boyer-Moore投票算法

皓月

算法

Java面试题库答案(技术+人事)

Java架构追梦

Java java面试 后端开发 程序员面试、

2022年短视频电商品牌营销专题—手机品牌抖音营销分析报告

极客天地

聚焦新基建,企业如何实现供应链管理再升级?

数商云

产业互联网 新基建 供应链

宜搭小技巧|巧用审批按钮,流程随心流转

一只大光圈

低代码 数字化 钉钉宜搭

如何用 Serverless 低成本打造个人专属网盘?

阿里巴巴云原生

阿里云 Serverless 云原生 网盘 低成本

与多家机构战略合作,背后彰显PlatoFarm元宇宙龙头的实力

BlockChain先知

DaaS服务之分布式日志/缓存/对象存储

穿过生命散发芬芳

4月月更

编程好习惯

源字节1号

软件开发

网络安全之内核提权漏洞深入分析

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

细数云上综合治理始末,华为云联创营解码企业运维之道

极客天地

Apache ShardingSphere 代码格式化实战 —— Spotless

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

企业团队协同软件,SaaS模式产品快速增长

小炮

SaaS 企业团队协同

数据库管理系统的未来是什么?

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

多方安全计算(MPC)发展脉络及应用实践

洞见科技

数据安全 隐私计算 多方安全计算 密码学和算法

关于K8s中Service Account的一些笔记:Pod内部如何访问K8s集群

山河已无恙

k8s 4月月更

nginx配置系列(一)nginx配置语法解读

乌龟哥哥

4月月更

被裁后半月面试8家公司无果,凭借这份Java面试指南成功入职阿里

Java全栈架构师

程序员 JVM 高并发 架构师 java面试

利器解读!Linux 内核调测中最最让开发者头疼的 bug 有解了|龙蜥技术

OpenAnolis小助手

开源 内存 技术分享 内核 龙蜥大讲堂

云原生时代的搜索服务算力管理

百度Geek说

架构 云原生 后端

易观分析发布:证券类APP用户体验指数评测框架

易观分析

证券app

自动化,怎么能少了性能测试

飞算JavaAI开发助手

受信通院之邀出席全球信息系统稳定性峰会,数列技术实力再获认可

TakinTalks稳定性社区

架构训练营毕业总结

Geek_16d2b8

架构训练营

虎符Hoo即将上线现货网格交易功能

区块链前沿News

虎符交易所

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