当前位置: 首页 > 科技观察

Chrome95有哪些有趣的新特性?

时间:2023-03-12 00:04:17 科技观察

Chrome95,10月19日正式发布,带来了哪些新特性?TL;TRChrome95最大的亮点是什么?WebAssembly终于支持异常处理,这是WebAssembly最缺乏的最重要的特性之一,这将有助于减小尺寸并提高性能。Chrome95是什么时候发布的?2021-10-19Chrome95更新了多少功能?14、ChromePlatformStatus中可以查看哪些具体功能Chrome95将使用哪个版本的V8引擎?我感兴趣的v9.5官方功能有哪些?WebAssembly异常处理安全支付确认EyeDropperAPI我对哪些原始试用功能感兴趣?减少UserAgent字符串信息WebAssembly异常处理详解WebAssembly异常处理在Chrome90开始试用,Chrome95正式发布,增加了WebAssemly的异常处理语法。具体指令如下表所示:ame操作码说明try0x06开始处理抛出异常的块catch0x07开始try块的catch块catch_all0x19beginsthecatch_allblockofthetryblockdelegate0x18beginsthedelegateblockofthetryblockthrow0x08创建一个由标签定义的异常,然后将其抛出rethrow0x09将exnref弹出堆栈顶部并将其抛出WebAssembly/exception-处理建议由Google的开发人员负责。它目前处于WebAssembly提案流程的第3阶段,并得到Firefox、Safari和Edge的支持。因此,有望成为官方标准。WebAssembly从诞生之日起就没有异常处理语法,这是一个相当大的问题。在浏览器环境下,通过JavaScript的try/catch“模拟”WebAssemly异常,继承了Asm.js的处理方式。基于JavaScript的WebAssembly异常处理方法如下图所示:左侧为WebAssembly伪代码,右侧为JavaScript胶水代码;根据右边的JavaScript函数invoke_vi,WebAssembly模块的调用放在了JavaScript的try/catch语句中;根据右边的JavaScript函数___cxa_throw,WebAssmebly的throw语句实际上是通过JavaScript的throw语句来模拟的;WebAssembly和JavaScript代码相互来回调用,使得生成代码量增加很多,同时降低了执行性能;图片来源:WebAssemblyExceptionHandling:AToolchain'sPerspective根据初步测试结果,基于WebAssembly原生的异常处理方式,代码量减少了30%左右,性能提升了30%左右。这个结果可以说是非常理想了,使用更少的代码实现了更好的性能。原则上,这个结果并不奇怪。但由于目前测试数据还很少,WebAssemblyExceptionHandling的真实效果还有待进一步验证。SecurepaymentconfirmationSecurepaymentconfirmation在Chrome91开始试用,Chrome95正式发布,旨在为用户提供更安全、更便捷的支付服务。SecurePaymentConfirmation是W3C提案,由Google开发者负责。由于其他浏览器厂商还没有表示是否支持,所以这个提案什么时候能成为W3C的标准还很难说。下图非常直观地展示了基于SecurePaymentConfirmation的支付流程:发起支付、授权支付、验证支付。图片来源:SecurePaymentConfirmation详解SecurePaymentConfirmation从两个方面优化了支付服务:用户无需离开购物网站(https://merchant.com),所有操作都在对话框中完成,提升了用户体验并提高转化率;用户使用WebAuthenticationAPI进行验证授权,使用生物认证(如指纹)代替密码进行验证,更安全、更方便;这种体验类似于在iOS应用中支付,无需离开应用,只需刷脸即可,非常方便。美国在线支付服务巨头Stripe尝试了Securepaymentconfirmation。为期3个月的实验结果表明,转换率提高了8%(从84.7%到92.7%),授权速度提高了3倍(中位数从36秒减少到12秒)。中国的网络支付行业已经远远超过欧美发达国家。这是时代发展的红利,也是互联网行业对社会最大的贡献之一。我想大家只是习惯了这种只需要携带手机的生活,还没有发现网上支付和各种互联网应用有多么重要。但是,对于Web应用来说,在线支付还存在很大的问题。要么用手机上的二维码扫码支付,要么需要跳转到支付网站。整个支付体验还没有达到最好的状态。要知道,用户的每一次跳跃都可能增加流失率。安全支付确认,减少用户跳转,有效提升体验和转化率。还是值得一试的。EyeDropperAPIChrome95正式发布了EyeDropperAPI,用于控制颜色选择器,支持在浏览器窗口外选择颜色。视觉检查可用于Figma等设计工具。EyeDropperAPI是WICG提案,由Microsoft的开发人员负责。EyeDropperAPI的使用非常简单:consteyeDropper=newEyeDropper();try{constselectedColor=awaiteyeDropper.open();console.log(selectedColor);//打印选择的颜色,例如:{sRGBHex:'#ff0000'}}catch(err){console.log("colorselectioncancelled");//用户按下ESC键关闭颜色选择器}创建EyeDropper实例后,可以使用open方法打开颜色选择器获取颜色用户选择的值:图片来源:EyeDropperAPIExplainer从EyeDropperAPI也可以看出,微软一直在积极参与浏览器标准的制定和制定。由Edge浏览器主导或积极参与的浏览器提案越来越多,例如WebAssembly、WebCodecs、EyeDropperAPI、VirtualKeyboardAPI、ClipboardAPI:Svg。谁说基于Chromium的浏览器只能平躺?参与Web技术标准的制定还是可以的。这对于基于Chromium的国内主流浏览器还是有借鉴意义的。..微软曾经用非常手段让IE浏览器称霸,但最后还是仁至义尽。IE浏览器不靠产品和技术取胜,后来输在产品和技术上。如下图所示,Chrome发布后,轻松拿走了IE浏览器几乎所有的份额。图片来源:时间轴:万维网30年历史IE浏览器最终被微软彻底抛弃,Edge改用Chromium作为浏览器内核,但微软只是改变了浏览器的研发策略,并没有放弃浏览器.云计算(Azure、Office365)业务的快速增长是微软复兴的核心动力。浏览器作为云计算产品入口的重要性不言而喻。Edge目前的市场份额还很低,但Chrome不得不提防这个强大的竞争对手:不差钱,手握PC操作系统Windows,业绩和市值全面复苏,企业文化和企业战略成功转型。不过最近Edge似乎想借Windows的垄断来强行推广,未免有些不厚道。风水轮流转,在浏览器创新上吃老本的现在是Safari。Chrome的核心开发者之一AlexRussell(今年转投Edge)写了一篇非常详细的文章ProgressDelayedIsProgressDenied,指责Safari及其浏览器引擎Webkit严重落后,AppStore要求所有浏览器在iOS端。使用Webkit引擎的政策严重制约了Web技术的发展,导致大量新的Web技术无法立即应用到iOS端。为了维护AppStore的商业利益,苹果不太可能率先放弃对iOS端Web技术的刻意控制,竞争对手只能诉诸法律手段。减少用户代理字符串信息Chrome95开始试用减少用户代理字符串信息功能。顾名思义,它旨在简化User-Agent字符串,减少其信息量,方便用户使用User-Agent字符串作为用户指纹,更好地保护用户隐私。同时,引导开发者使用更多保护用户隐私的User-AgentClientHints获取浏览器信息,减少大家对User-Agent字符串的依赖。Chrome计划在Chrome113中完成对UserAgent字符串的简化,但从最终结果来看,User-Agent的变化其实很小。对于ChromeWindows用户,旧的User-Agent字符串是这样的:Mozilla/5.0(WindowsNT6.3;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/93.0.1234.56Safari/537.36经过简化最终的User-代理字符串是这样的:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/93.0.0.0Safari/537.36WindowsNT6.3变成WindowsNT10.0,Chrome/93.0.1234.56变成Chrome/93.0.0.0仅此而已。Windows的版本号固定为10.0,即使用户更新操作系统也不会改变;Chrome的版本号只保留主版本号,省略了次版本号。也就是说,我们仍然可以通过User-Agent字符串获取浏览器的名称及其主版本号,操作系统的名称,区分桌面端和移动端。但是我们无法通过User-Agent字符串获取到浏览器的次版本号和操作系统的版本号。另外,对于安卓端,不再提供手机的品牌和型号。User-Agent字符串可以提供的浏览器信息比较模糊,有利于保护用户隐私。如果开发者需要获取更准确的浏览器信息,则需要使用Chrome89中已经推出的User-AgentClientHints。User-AgentClientHints对应的HTTP请求头字段如下:请求头取值示例Sec-CH-UA"Chromium";v="84","GoogleChrome";v="84"Sec-CH-UA-Mobile?1Sec-CH-UA-Full-Version"84.0.4143.2"Sec-CH-UA-Platform"Android"Sec-CH-UA-Platform-Version"10"Sec-CH-UA-Arch"arm"Sec-CH-UA-Model"Pixel3"Sec-CH-UA-Bitness"64"默认浏览器只发送Sec-CH-UA,Sec-CH-UA-Mobile,Sec-CH-UA-Platform,和用户——代理提供的信息量是一样的。如果服务端需要获取其他User-AgentClientHints字段,需要指定必填字段。这样做的好处是浏览器默认提供的用户信息较少。服务器和网络应用理论上可以记录和审计服务器请求的信息量,可以更主动地保护用户隐私。Web端监控服务,如ARMS、Fundebug、Sentry等,如果需要获取更准确的客户端信息,需要使用User-AgentClientHints。当然,还是推荐使用User-AgentClientHints来获得用户的授权。插件和应用程序不应为用户做决定,否则该功能对保护用户隐私没有实际意义。总结一下这篇博客,我介绍的Chrome功能很少,只有4个,因为我不打算介绍所有的Chrome功能,没有必要,也没有那么多时间。对于《了不起的Chrome浏览器》的写作,我只关注以下四类特性:革命性的特性,如:WebAssembly(SIMD,异常处理)、WebGPU、WebCodecs;创新功能,例如:WebNFC、WebBluetooth、WebOTPAPI;具有兼容性风险的特性,例如:减少UserAgent字符串信息;与安全相关的功能,例如:阻止HTTP端口554、阻止端口989和990、crypto.randomUUID();对其他功能感兴趣的同学,不妨直接查看ChromePlatformStatus,这个网站介绍了Chrome的版本、功能和发布日期。最近发现ChromePlatformStatus还会列出Chrome各个版本的开发特性、试用特性和移除特性。纯粹是为了方便我的写作,太棒了!