3月初刚公布的Chrome 89,带来了哪些有意思的新个性呢?

背景

十多年来,Web技术突飞猛进,这其中,Chrome功绩是最大的,能够说没有之一。对于这一点,我在之前的博客中曾经阐述过了:

  • JavaScript深入浅出第5课:Chrome是如何胜利的?
  • 第三方cookie马上就不让用了,互联网广告还怎么玩?

当初,Chrome曾经不只是一个简略的浏览器,而是一个决定Web技术倒退方向的平台型产品,它的位置也就仅次于Linux、iOS、Andirod和Windows吧。

重要的是,Chrome并没有停下翻新的脚步,始终在推动Web技术往前倒退。

始终以来,Chrome每隔 6 周公布一个新版本。最近,Chrome发表将会放慢这个公布流程,改为每 4 周公布一个新版本。

身处大前端这个畛域,理解Chrome的倒退能够帮忙咱们了解整个行业的发展趋势。

Chrome最值得关注的新个性有2个方向:

  • 新的能力,新的API,比方Web NFC这种,能够用在理论的利用场景中,带来业务上的翻新;
  • 平安及隐衷方面的规定批改,比方禁用第三方Cookie,会影响到业务的稳定性;

从这篇文章开始,我将以《了不起的Chrome浏览器》为题,对Chrome的每一个版本进行具体解读,分享一些本人兴许并不成熟的思考,欢送关注寒雁Talk公众号。

TL;TR

为了防止占用过多公共资源,我先简略总结一下吧:)

  • Chrome 89是哪天公布的?2021-03-02
  • 在哪能够查看Chrome的版本信息?Chrome Platform Status
  • Chrome 89更新了多少个个性?30个,具体有哪些个性能够查看Chrome Platform Status
  • Chrome 89最大的亮点是什么?、Web NFC、WebHID以及Web Serial API,这3个个性使得Web利用能够更加便捷地与硬件进行交互,JavaScript或成为物联网时代的最大赢家。
  • 我感兴趣的新个性顺次有哪些?

    • Top-level await
    • Web NFC
    • WebHID
    • Web Serial API
    • performance.measureUserAgentSpecificMemory()
  • 你感兴趣的新个性顺次有哪些?这个我就不晓得了啊,欢送留言评论!

这里,必须点赞Chrome Platform Status这个站点,它把Chrome每一个版本的每一个个性都整顿得十分分明。而我做的事件,无非是做个勤奋的搬运工就好了~

具体解读

30个新个性我无奈一一介绍,那我就挑5个还比拟有意思的个性来聊聊吧,对其余个性感兴趣的话,能够看看Chrome Platform Status。

Top-level await

作为一个JavaScript程序员,Async/Await是我最喜爱的个性之一,把我从Promise.then的天堂中解脱进去。爱屋及乌,Top-level await也很妙啊。

上面这个html,在Chrome 88上会报错:"Uncaught SyntaxError: Unexpected reserved word",在Chrome 89上则能够正确执行。这是因为Chrome 89的V8引擎降级到了V8.9,反对了Top-level await。

<!DOCTYPE html><head>  <title>Top-level await</title></head><body>  <script type="module">    await Promise.resolve(alert('hello, world!'));  </script></body>

以前,await只能在async函数中应用,当初毋庸async函数也能够应用了,能够利用在数据库连贯初始化等场景,更加不便:

const connection = await dbConnector();

值得注意的是,Top-level await只能在ES Module中应用。并且,应用Top-level await的话,会对ES Module的执行程序造成影响,阻塞应用了Top-level await的Module及其父节点(parent module)的执行。

Top-level await这个提案曾在社区中引起很大的争议,起初提案批改之后,不再阻塞兄弟节点(sibling module)的执行,当初顺利进入Stage 3,也是不容易啊。

Web NFC

NFC是Near Field Communication的缩写,中文名为"近场通信",能够用在挪动领取、门禁等场景。

Chrome 89的Andriod版本默认开启了Web NFC,这为Web利用又拓展一大利用场景。

下图这个Demo还是很有意思的,手机凑近卡片就能通过NFC辨认卡片的色彩。

传说中不可能实现的需要:依据手机壳的色彩批改UI色彩,这不就实现了嘛,哈哈。

Chrome推动Web技术走向各个利用场景的致力,再下一城。NFC的应用场景大多都挺简略的,为了这个去开发原生利用仿佛有点杀鸡用牛刀,Web技术可能是更好的抉择。在领取、门禁、票务、地铁公交等须要刷卡的场景,Web利用都有了用武之地。

WebHID

HID的全称是Human Interface Devices,不太好翻译,看来Google的同学们造词能力也很厉害。HID其实就是各种各样的输入输出设备。很多设施因为太新、太旧、太少见或者不足规范,所以零碎很难应用,WebHID API使得这些设施能够更不便地与Web利用进行交互。

其实,HID次要指的就是游戏手柄,因为游戏手柄的标准化做的还不够好。

Demo中有点理论价值的也就PlayStation和Switch的案例,果然还是利好游戏宅...

大家能够感受一下,用Switch的Joy-Con手柄怎么玩Chrome的恐龙游戏,能够说十分魔性了....断网的时候大家又多了一个锻炼身体的新姿态...

以后,线下游戏厅外面的游戏界面都挺古老的,还停留在上个世纪,与线上游戏存在代际差距,亟待降级,如果采纳Web技术来开发,研发老本更低,兼容性更好,当初也能够不便地与游戏手柄进行交互了,应该是一个值得尝试的畛域。

Web Serial API

**
串行接口(Serial port),次要用于串行式逐位数据传输,打印机、单片机等设施都是通过串行端口与计算机连贯的。

串行设施(Serial device)能够通过串行接口、模仿串行接口的USB接口或者蓝牙连贯计算机。Web利用则能够通过Web Serial API与串行设施进行通信。

下图是BBC micro:bit,是用于教育场景的单片机,它有一个MicroUSB接口,能够连贯电脑。Google Developer codelab给的一个案例,就是应用Web Serial API在micro:bit上展现一个心形图像。

这几年少儿编程挺火的,让小朋友单纯地写代码其实挺无聊的,如果能联合相似于BBC micro:bit这样的硬件设施,让小朋友们看到真正的成果,哪怕是简略的LED灯管制,应该能够更好的激发小朋友们的趣味。而Web技术人造的低门槛、跨平台的个性,还挺适宜教育这个场景的。

performance.measureUserAgentSpecificMemory()

Chrome 89新增了performance.measureUserAgentSpecificMemory()接口,用于测量页面的内存使用量。

如果咱们间接在控制台执行performance.measureUserAgentSpecificMemory(),则很可能会报错:

Uncaught (in promise) DOMException: Failed to execute 'measureUserAgentSpecificMemory' on 'Performance': performance.measureUserAgentSpecificMemory requires cross-origin isolation.

这是因为performance.measureUserAgentSpecificMemory()只能在启用了cross-origin isolated的页面中执行,这样做是为了平安。

名字这么长的API还是头一次见,还不让人用,不讲武德啊...

为了测试,我写了个简略的Egg利用:

'use strict';const Controller = require('egg').Controller;class HomeController extends Controller {  async index() {    const { ctx } = this;    ctx.set('Cross-Origin-Embedder-Policy', 'require-corp');    ctx.set('Cross-Origin-Opener-Policy', 'same-origin');    ctx.body = 'hi, egg';  }}module.exports = HomeController;

Header中返回上面的值即可:

这时在控制台就能够执行performance.measureUserAgentSpecificMemory()了

await performance.measureUserAgentSpecificMemory();

performance.measureUserAgentSpecificMemory()是在浏览器执行垃圾回收的时候度量页面的内存使用量,

{    "breakdown": [        {            "attribution": [],            "bytes": 0,            "types": []        },        {            "attribution": [                {                    "scope": "Window",                    "url": "http://127.0.0.1:7001/"                }            ],            "bytes": 191222,            "types": []        },        {            "attribution": [],            "bytes": 786305,            "types": [                "Shared"            ]        }    ],    "bytes": 977527}

一个Hello World页面用了900KB内存,比尔盖茨哭晕在厕所外面...

总结

Chrome 89最大的亮点Web NFC、WebHID以及Web Serial API这3个个性,它们其实是在做同一件事件,让Web利用冲破页面自身,能够更加便捷地与硬件进行交互,JavaScript无望成为物联网时代的一等公民。

本文中介绍的Web NFC、WebHID以及Web Serial API的Demo案例都还有点意思,不过都稍显稚嫩,不过这也意味着这方面的利用还刚刚开始,将来的设想空间很是挺大的。文章中,我聊到了它们在领取、门禁、票务、交通、游戏以及教育方面的利用场景,应该还有更多值得大家摸索的场景,想想还是挺有意思呢。

WebHID以及Web Serial API有啥区别呢?对于这一点,我还没有钻研分明,感兴趣的同学能够关注一下我在GitHub提的issue:What are the differences between WebHID and Web Serial API?

Web NFC、WebHID以及Web Serial API都属于Chrome的capabilities project,其指标在于打消Web利用于原生利用之间的差距,让Web利用能够做任何iOS、Andriod以及桌面利用能够做的事件。这个指标看起来有些挑战性,然而也没有什么不可能的,10年前,你能设想Web利用能够倒退到明天这个水平吗?那10年后会怎么样呢?让咱们刮目相待吧!

欢送关注寒雁Talk公众号,关注《了不起的Chrome浏览器》系列博客,与我一起见证大前端的星辰大海!

参考

  • Top-level await
  • Top-level await is a footgun
  • JavaScript深入浅出第5课:Chrome是如何胜利的?
  • 第三方cookie马上就不让用了,互联网广告还怎么玩?
  • Chrome 89 Beta: Advanced Hardware Interactions, Web Sharing on Desktop, and More
  • New in Chrome 89: Web Serial, HID, NFC, PWA installability changes, and more!
  • Getting started with the Web Serial API
  • What are the differences between WebHID and Web Serial API?
  • 2020 前端技术倒退回顾
  • Why you need "cross-origin isolated" for powerful features

招聘

阿里巴巴业务平台事业部长期招聘P6及以上前端大佬,参加建设最前沿的阿里前端生态系统,推动行业技术倒退,内推地址:hanyan.lk@alibaba-inc.com

欢送大家关注我的微信公众号寒雁Talk