JavaScript 引擎 V8 发布 8.4 版本
JavaScript 引擎 V8 发布了 8.4 版本(测试阶段),正式版本将在之后随 Chrome 84 一起推出。8.4 版本带来了一些面向开发人员的特性,主要亮点包括:
WebAssembly
缩短启动时间
WebAssembly 的基准编译器(Liftoff)现在支持原子指令和大容量内存操作。这意味着用户可以获得更快的启动时间。
更好的调试
为了不断改善 WebAssembly 的调试体验,开发团队表示现在能够检查任何暂停执行或到达断点的实时 WebAssembly 框架。这是通过重新使用 Liftoff 进行调试来实现的。过去,所有具有断点或逐步执行的代码都需要在 WebAssembly 解释器中执行,这大大降低了执行速度。使用 Liftoff 会损失大约三分之一的性能,但是可以单步执行所有代码,并随时进行检查。
SIMD Origin Trial
SIMD 提案使 WebAssembly 能够利用常用的硬件矢量指令来加速计算密集型工作负载。V8 支持 WebAssembly SIMD 提案。要在 Chrome 中启用此功能,请使用标记 chrome://flags/#enable-webassembly-simd 或注册 origin trial 试用。Origin 试用版允许开发人员在功能标准化之前进行试验,并提供反馈。
JavaScript
弱引用和终结器
提醒:弱引用和终结器是高级功能,它们取决于垃圾回收行为。垃圾回收是不确定的,可能根本不会发生。
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 的执行。
这些是高级且强大的功能,如果幸运的话,你的程序将不需要它们。
私有方法和访问器
v7.4 中提供的私有字段在对私有方法和访问器的支持中得到了完善。从句法上讲,私有方法和访问器的名称以 #
开头,就像私有字段一样。以下是语法的简要介绍。
class Component { #privateMethod() { console.log("I'm only callable inside Component!"); } get #privateAccessor() { return 42; } set #privateAccessor(x) { } }
私有方法和访问器具有与私有字段相同的作用域规则和语义。可参阅 说明 以了解更多信息。
V8 API
请使用 git log branch-heads/8.3..branch-heads/8.4 include/v8.h
来获取 API 更改列表。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Redisson 3.13.2 发布,官方推荐的 Redis 客户端
Redisson 3.13.2已发布,这是一个 Java 编写的 Redis 客户端,具备驻内存数据网格(In-Memory Data Grid)功能,并获得了 Redis 的官方推荐。 主要更新内容: 使用 ShardedRedisson对象对 Redis 设置进行分区(分片)操作 新增CLUSTERDOWN错误处理 将getConfig和setConfig方法添加到RedisNode接口 修复对空哨兵列表的处理 修复 RMapCache.clear() 方法清除 maxSize 选项的问题 修复在 fallback 模式下Redisson 对 hibernate访问速度变慢的问题 修复 Redisson 启动时哨兵主机名不用于SSL 连接的问题 修复如果抛出 RedisException 异常,RBloomFilter方法抛出空指针异常的问题 修复RAtomicDouble.getAndSet()方法抛出空指针异常的问题 修复RAtomicLong.getAndSet()方法抛出空指针异常的问题 修复在 Tomcat 环境下抛出 ClassCastException 异常的问题 修...
- 下一篇
每日一博 | 实战于618大促的京东毫秒级热 key 探测框架设计与实践
在拥有大量并发用户的系统中,热key一直以来都是一个不可避免的问题。或许是突然某些商品成了爆款,或许是海量用户突然涌入某个店铺,或许是秒杀时瞬间大量开启的爬虫用户, 这些突发的无法预先感知的热key都是系统潜在的巨大风险。 风险是什么呢?主要是数据层,其次是服务层。 热key对数据层的冲击显而易见,譬如数据存放在redis或者MySQL中,以redis为例,那个未知的热数据会按照hash规则被存在于某个redis分片上,平时使用时都从该分片获取它的数据。由于redis性能还不错,再加上集群模式,每秒我们假设它能支撑20万次读取,这足以支持大部分的日常使用了。但是,以京东为例的这些头部互联网公司,动辄某个爆品,会瞬间引入每秒上百万甚至数百万的请求,当然流量多数会在几秒内就消失。但就是这短短的几秒的热key,就会瞬间造成其所在redis分片集群瘫痪。原因也很简单,redis作为一个单线程的结构,所有的请求到来后都会去排队,当请求量远大于自身处理能力时,后面的请求会陷入等待、超时。由于该redis分片完全被这个key的请求给打满,导致该分片上所有其他数据操作都无法继续提供服务,也就是...
相关文章
文章评论
共有0条评论来说两句吧...