大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

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

关注

评论

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

设计模式之美-代码评价标准

GalaxyCreater

设计模式

互联网安全体制的挑战与机遇

阿泽🧸

互联网安全 11月月更

一次基于Fastjson的JNDI注入

网络安全学海

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

企业级业务架构设计:方法论与实践 学习笔记

程序员架构进阶

业务架构 TOGAF 11月日更 Zachman

2022-11-03:给定一个数组arr,和一个正数k 如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号, 而且可以涂上1~k每一种颜色 如果arr[i] != 0,表示i这里已经确

福大大架构师每日一题

算法 rust 福大大

简述机器学习库

穿过生命散发芬芳

机器学习 11月月更

前端必会面试题总结

loveX001

JavaScript

圆满落幕!回顾 eBPF 技术的发展与挑战

OpenAnolis小助手

Linux 云原生 ebpf 云栖大会 龙蜥社区

极速体验docker容器健康

程序员欣宸

容器化 docekr 11月月更

这样回答前端面试题才能拿到offer

loveX001

JavaScript

设计模式之美-面向对象、设计原则、设计模式、编程规范、重构的关系

GalaxyCreater

设计模式

我上了个假“中台”!

雨果

数据中台

专访微盟CTO黄骏伟:WOS将为去中心化商业提供一整套数字基建

B Impact

MySQL能力全开放,OceanBase 社区版 4.0 正式上线

OceanBase 数据库

StarRocks 技术内幕 | Join 查询优化

StarRocks

数据库

从1开始,扩展Go语言后端业务系统的RPC功能

闫同学

后端 go语言 11月月更

从2开始,在Go语言后端业务系统中引入缓存

闫同学

Go 设计 后端 11月月更

跟着卷卷龙一起学Camera--信号采样02

卷卷龙

ISP camera 11月月更

promise执行顺序面试题令我头秃,你能作对几道

loveX001

JavaScript

年前端react面试打怪升级之路

beifeng1996

React

从0开始,用Go语言搭建一个简单的后端业务系统

闫同学

后端 go语言 11月月更

Linux中 dir 命令还能这样玩!

wljslmz

Linux 11月月更

跟着卷卷龙一起学Camera--MIPI 03

卷卷龙

ISP camera 11月月更

史海峰:成为技术领导者 从技术到管理的必经之路丨声网开发者创业讲堂 • 第 5 期

声网

技术管理 人工智能’

跟着卷卷龙一起学Camera--信号采样01

卷卷龙

ISP camera 11月月更

如何在知乎平台上做营销推广:推荐几种引流方式

石头IT视角

Ansible 部署的时候提示错误 SSH password instead

HoneyMoose

js异步编程面试题你能答上来几道

loveX001

JavaScript

React组件之间的通信方式总结(上)

beifeng1996

React

📢利用Vite插件助力证书安装

小鑫同学

前端 插件 11月月更

React组件之间的通信方式总结(下)

beifeng1996

React

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