在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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

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

关注

评论

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

在线问题反馈模块实战(十五)​:实现在线更新反馈状态功能

bug菌

springboot 项目开发 10月月更

Spring Boot概述(二)

Studying_swz

springboot 10月月更

服务治理实施流程

阿泽🧸

10月月更 服务管理

“程”风破浪的开发者 | 关于web3.0远离银手镯比什么都重要!

王中阳Go

区块链 NFT Web3.0 10月月更 “程”风破浪的开发者

数据结构-栈、队列、堆(java)

Studying_swz

数据结构 10月月更

Linux项目实训一

渔戈

Linux Ubuntu系统环境 10月月更

架构实战营模块3-外包学生管理系统架构设计文档

冷夫冲

架构 架构设计 架构训练营

Vue3:认识侦听器watch🔥

渔戈

Vue 前端 10月月更

Linux线程-生产消费模型/线程池

可口也可樂

Linux 线程 10月月更

Linux线程-同步与互斥

可口也可樂

Linux 线程 10月月更 同步与互斥

谈谈曾经做的一个测试报告平台(1)

MegaQi

Python 测试平台 10月月更

HashMap 源码分析(五)

知识浅谈

HashMap底层原理 10月月更

在线问题反馈模块实战(十三)​:实现多参数分页查询列表

bug菌

springboot 项目开发 10月月更

【kafka运维】ConfigCommand运维脚本

石臻臻的杂货铺

kafka 运维 kafka运维 10月月更

云数据库助力电池云(一)

CnosDB

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

资源管理系统Apache Mesos

穿过生命散发芬芳

10月月更 Mesos

ubuntu使用apt-get安装docker

忙着长大#

Ubuntu20.04

Python运算符有哪些你清楚吗

芥末拌个饭吧

后端 python 3.5+ 10月月更

如何用crontab实现Python定时任务

芥末拌个饭吧

后端 python 3.5+ 10月月更

SAP CDS entity 中使用 @readonly 进行访问控制

汪子熙

CDS SAP abap 10月月更

JS逆向笔记

渔戈

JavaScript 逆向分析 10月月更

在线问题反馈模块实战(十四):实现在线答疑功能

bug菌

springboot 项目开发 10月月更

【kafka运维】TopicCommand运维脚本(1)

石臻臻的杂货铺

kafka 运维 10月月更

极客时间运维进阶训练营第一周作业

老曹

docker数据卷使用

忙着长大#

,docker

python有哪些格式化输出的方法

芥末拌个饭吧

后端 python 3.5+ 10月月更

Jenkins把GitHub项目做成Docker镜像

程序员欣宸

Docker jenkins 10月月更

PyTorch (1) | PyTorch的安装与简介

timerring

PyTorch 10月月更

Linux系统-基础IO

可口也可樂

Linux 10月月更 基础IO

Web3.0杂谈-#008(55/100)

hackstoic

Web3.0

MyBatisPlus学习

Studying_swz

mybaitsplus 10月月更

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