写点什么

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

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

关注

评论

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

面向快速反应的工程团队--QRF团队模型

俞凡

管理 研发效能

软件架构的23个基本原则

俞凡

架构

7点建议助您写出优雅的Java代码

爱好编程进阶

Java 程序员 后端开发

PingCode 产品怎么样?产品底层逻辑是什么样的?

爱吃小舅的鱼

Dagger2源码分析(三)从源码角度分析注解在Dagger2中的使用

爱好编程进阶

Java 程序员 后端开发

dubbo + zookeeper + spring 分布式系统

爱好编程进阶

Java 程序员 后端开发

IntelliJ IDEA开发最佳配置

爱好编程进阶

Java 程序员 后端开发

Java 之 SpringMVC(一篇文章精通系列)

爱好编程进阶

Java 程序员 后端开发

这是一篇关于哈希表的爽文

武师叔

5月月更

4000字,详解Python操作MySQL数据库

爱好编程进阶

程序员 后端开发

Cookie & Session

爱好编程进阶

Java 程序员 后端开发

Day386&387

爱好编程进阶

Java 程序员 后端开发

模块四作业(试卷存储设计)

天琪实刚亮

client-go实战之一:准备工作

爱好编程进阶

Java 程序员 后端开发

模块三作业

天琪实刚亮

Docker入门

爱好编程进阶

Java 程序员 后端开发

Java 总结:各种排序算法的介绍及其之间的对比差异

爱好编程进阶

Java 程序员 后端开发

Java-进阶:多线程2

爱好编程进阶

Java 程序员 后端开发

网站开发进阶(二)阿里云将80端口请求转发到其他端口

No Silver Bullet

5月月更 端口转发 端口映射

7-52 两个有序链表序列的交集 (20 分)(思路加详解尾插法)come Boby!

爱好编程进阶

程序员 后端开发

address list(dynamic)- 通讯录动态版本

爱好编程进阶

Java 程序员 后端开发

ArrayList、HashMap等集合初始容量的大小以及扩容的倍数

爱好编程进阶

Java 程序员 后端开发

一、何为应用系统高可用

穿过生命散发芬芳

5月月更

使用PIL.Image库极简生成含冬奥会元素头像

芝士味的椒盐

Python 冬奥会 5月月更

maven构建docker镜像三部曲之一:准备环境

程序员欣宸

Java Docker 5月月更

Day435&436

爱好编程进阶

Java 程序员 后端开发

SpringSecurity默认页面生成

急需上岸的小谢

5月月更

2022必会的前端手写面试题

buchila11

前端面试

关于“运放“这些知识点

謓泽

5月月更

前端食堂技术周刊第 35 期:Vitest v0.10.0、Jest 28、Ant Design v4.20.0、Lerna 官宣停止维护、UnoCSS 交互式

童欧巴

JavaScript web前端 前端工程师

Hadoop全分布式部署

芝士味的椒盐

Java 大数据 hadoop 5月月更

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