面试官:HTTP/2 有什么优点?别再说 Server Push 了

邴原
• 阅读 1284

2022年8月18日,Chrome 开发团队博客发布了“Removing HTTP/2 Server Push from Chrome”一文,表示 Chrome 106 和之后的版本将默认禁用 HTTP/2 Server Push 特性

为什么会被移除?

Server Push 允许网站主动推送页面所需的资源,而不是被动等待。但实际上很难以此实现性能提升,所以用这个特性的人并不多,使用了 HTTP/2 的站点中,仅有 1.25% 用了 Server Push。很多 HTTP/3 服务器和客户端都没实现 Push 功能,即使规范中规定了。对很多已经用上 HTTP/3 的 web 服务来说,PUSH 实际上已经过时了

HTTP/2 Server Push 的替代品

103 Early Hints 是个不错的选择,它有很多与 Push 相同的优点。与服务端推送资源不同,103 Early Hints 只向浏览器发送可能会立即请求的资源提示,并将请求资源的控制权交给浏览器--例如,如果HTTP缓存中已经有了这些资源,就不需要再向服务端发起请求

预加载(Preload)关键资源也是一种选择。它允许页面和浏览器一起工作,以便在页面加载早期优先加载关键资源。虽然这个方案需要页面自身先被加载,但它不会延迟关键资源加载

Early Hints

现在的网站越来越复杂,服务器可能需要执行一些重要工作(比如连接数据库)来生成所请求的页面。但这种服务器的“思考时间”会在浏览器开始呈现页面前产生延迟。在服务器准备响应的的过程中,连接实际上一直处于空闲状态(图中灰色部分即为服务器“思考时间”)

面试官:HTTP/2 有什么优点?别再说 Server Push 了

Early Hints 是一个 HTTP 状态码,用于在最终响应前发送一个预请求。在服务器忙于生成主要资源(html文档)同时,允许服务器向浏览器发送当前页面可能使用的关键子资源(css,js)的提示,浏览器可以根据这些提示,在等待主资源同时,预连接,请求子资源。简单说,Early Hints 通过提前做一些工作来帮助浏览器利用上述的服务器“思考时间”,来加速页面加载速度

面试官:HTTP/2 有什么优点?别再说 Server Push 了

Preload

Preload 则是一个新的控制特定资源如何加载的 Web 标准。通过 <link ref="preload" /> 使用。通过 Preload 加载重要资源是个不错的选择

结论

Web 技术需要尝试一些东西,并在不需要时丢弃。尽管 Push 听起来很有潜力,但实际使用中问题比预想的更多。Chrome 团队在设计 Push 过程中学到了很多关于 103 Early Hints 的内容,现在是时候放弃 Push 了

参考

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Stella981 Stella981
3年前
JVM 字节码指令表
字节码助记符指令含义0x00nop什么都不做0x01aconst\_null将null推送至栈顶0x02iconst\_m1将int型1推送至栈顶0x03iconst\_0将int型0推送至栈顶0x04iconst\_1将int型1推送至栈顶0x05ic
Wesley13 Wesley13
3年前
MBR笔记
<bochs:100000000000e\WGUI\Simclientsize(0,0)!stretchedsize(640,480)!<bochs:2b0x7c00<bochs:3c00000003740i\BIOS\$Revision:1.166$$Date:2006/08/1117