限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

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

关注

评论

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

公用事业财务共享如何建,看南京水务立标杆

用友BIP

财务共享

伊利与腾讯云 CODING 的「水乳交融」启示录

CODING DevOps

DevOps 最佳实践 数字化转型 CODING

国内一流地方金融控股集团-长投控股怎样建设财务共享平台?

用友BIP

财务共享

业务高速增长,如祺出行如何用腾讯云消息队列 RocketMQ 应对挑战

科技热闻

可视化探索开源项目的 contributor 关系

NebulaGraph

开源

代码级质量技术之基本框架介绍

百度Geek说

单元测试 开发语言 C++ 企业号 5 月 PK 榜

淬体归元,运营商资源域元数据管理

鲸品堂

大数据 管理 元数据 企业号 5 月 PK 榜

网络性能问题排查思路

蓝胖子的编程梦

TCP 网络 问题排查 问题定位 问题解析

NGINX Service Mesh 中的 mTLS 架构

NGINX开源社区

nginx Service Mesh

优秀的屏幕取色软件:ColorSnapper2激活版

真大的脸盆

Mac Mac 软件 屏幕取色器

平行云X火山引擎:探索XR观展的极致体验

火山引擎边缘云

XR 火山引擎 实时云渲染 平行云 火山引擎边缘云

火山引擎DataLeap:如何构建一套完整、易用的数据标准体系

字节跳动数据平台

大数据 数据治理 数据标准 数据研发

DB-GPT: Github 两周2.6k star 数据库领域的GPT来了~

csunny

GPT autogpt LLMs

2022 Kube-OVN开源社区年度报告

York

开源 云原生 k8s 容器网络 cni

SpringCloud 中 Zuul 网关原理及其配置

Java Spring Cloud 网关 Zuul

JWT真的安全吗?如何解决该问题

JWT

Java高并发难题一网打尽,全网最全的高并发设计文档

Java 架构 系统设计 高并发

OIDC & OAuth2.0 协议及其授权模式详解|认证协议最佳实践系列【1】

Authing

身份认证 OAuth 2.0 单点登录 OIDC

起猛了!从Github大佬白嫖的分布式进阶宝典,啃完感觉能吊锤面试官

Java 架构 分布式

复盘的价值是什么?

老张

复盘 复盘归因

软件测试/测试开发丨Web自动化测试-高级定位CSS

测试人

CSS 程序员 软件测试 自动化测试 测试开发

架构训练营模块二作业

Geek_3d7c4d

解读与用户一起“跳动”的开源实时监控工具 HertzBeat

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

央企财务共享建设路径四大趋势洞察

用友BIP

财务共享

MaxCompute 物化视图智能推荐最佳实践

阿里云大数据AI技术

大数据 算力加速 智能推荐 企业号 5 月 PK 榜

ShareSDK Android端合规指南

MobTech袤博科技

借生态力量助力人工智能发展 英特尔这些年做了哪些事?

E科讯

PAG动效框架源码笔记 (四)渲染框架

olinone

ios android 动画 移动 特效

强!PCB“金手指”从设计到生产全流程

华秋PCB

工具 PCB 连接器 PCB设计 金手指

融云参编中国信通院「办公即时通信研究报告」,并入选「典型行业案例」

融云 RongCloud

PaaS 即时通讯 办公 信息 融云

“源生无限,同行致远”,加速迈向智能世界

说山水

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