JavaScript 引擎 V8 发布8.4 版本, 新版本带来了一些面向开发人员的特性

秃噜豆儿 发表于2020-07-03 09:18
浏览次数:
在手机上阅读
此文章约为1227字,阅读需要4 分钟

avaScript 引擎 V8 发布了8.4 版本(测试阶段)带来了一些面向开发人员的特性,正式版本将会随Chrome 84一起推出。

1、缩短启动时间

WebAssembly 的基准编译器(Liftoff)现在支持原子指令和大容量内存操作,这表示用户可以获得更快的启动时间。

2、更好的调试

为了不断改善WebAssembly的调试体验,开发团队表示现在能够检查任何暂停执行或到达断点的实时WebAssembly框架。这是通过重新使用Liftoff进行调试来实现的。过去,所有具有断点或逐步执行的代码都需要在WebAssembly解释器中执行,这大大降低了执行速度。使用Liftoff会损失大约三分之一的性能,但是可以单步执行所有代码,并随时进行检查。

3、SIMD Origin Trial

SIMD提案使WebAssembly能够利用常用的硬件矢量指令来加速计算密集型工作负载V8支持WebAssembly SIMD提案。要在Chrome中启用此功能,请使用标记chrome://flags/#enable-webassembly-simd或注册origin trial试用。Origin试用版允许开发人员在功能标准化之前进行试验,并提供反馈。

4、弱引用和终结器

提醒:弱引用和终结器是高级功能,它们取决于垃圾回收行为。垃圾回收是不确定的,可能根本不会发生。

JavaScript 是一种垃圾回收语言,这意味着当垃圾回收器运行时,程序无法再访问的对象所占用的内存可能会自动回收。除了 WeakMap 和 WeakSet 中的引用之外,JavaScript 中的所有引用都是强大的,可以防止对引用的对象进行垃圾回收。例如,

const globalRef = { callback() { console.log('foo'); } };// As long as globalRef is reachable through the global scope,// neither it nor the function in its callback property will be collected.

JavaScript 程序员现在可以通过 WeakRef 功能保留对象。如果弱引用所引用的对象也未得到强引用,则它们不会阻止对其进行垃圾回收。

const globalWeakRef = new WeakRef({ callback() { console.log('foo'); } }); (async function() { globalWeakRef.deref().callback(); // Logs “foo” to console. globalWeakRef is guaranteed to be alive // for the first turn of the event loop after it was created. await new Promise((resolve, reject) => { setTimeout(() => { resolve('foo'); }, 42); }); // Wait for a turn of the event loop. globalWeakRef.deref()?.callback(); // The object inside globalWeakRef may be garbage collected // after the first turn since it is not otherwise reachable.})();

WeakRefs 的附带功能是 FinalizATIonRegistry,该功能使程序员可以在对象被垃圾回收后注册要调用的回调。例如,下面的程序可能在 IIFE 中回收了无法访问的对象后将日志记录到控制台 42。

const registry = new FinalizATIonRegistry((heldValue) => { console.log(heldValue); }); (function () { const garbage = {}; registry.register(garbage, 42); // The second argument is the “held” value which gets passed // to the finalizer when the first argument is garbage collected.})();

结器计划在事件循环上运行,并且永不中断同步 JavaScript 的执行。

这些是高级且强大的功能,如果幸运的话,你的程序将不需要它们。

5、私有方法和访问器

v7.4 中提供的私有字段在对私有方法和访问器的支持中得到了完善。从句法上讲,私有方法和访问器的名称以 # 开头,就像私有字段一样。

以下是语法的简要介绍:

class Component { #privateMethod() { console.log("I'm only callable inside Component!"); } get #privateAccessor() { return 42; } set #privateAccessor(x) { } }
340 个用户觉得很有用

uc电脑园提供的技术方案或与您产品的实际情况有所差异,您需在完整阅读方案并知晓其提示风险的情况下谨慎操作,避免造成任何损失。

如此好文,分享给朋友

图片来源:网络

本文转载来至 cnbeta

大家正在看
发表评论
验证码:
评论列表
共0条