2024: 又是令人难以置信的一年,ES15 带来了全新的 JavaScript 功能升级。
从复杂的异步功能到数组语法糖和现代的正则表达式,JavaScript 编码现在比以往任何时候都更简单、更快速。
原生的数组 group-by 方法
到此唯一一个能支持 Lodash 库继续存活的理由也没有了。
我本以为会有一个类似 Array.prototype.groupBy 的新实例方法,但不知出于什么原因,他们把它变成了静态方法。
这导致我们必须使用Map.groupBy
对对象键进行分组:
不过,几乎没有人会用这种方法对数组进行分组,因此这种方法可能不会太流行。
解析来自外部的 Promise — 现代方式
从外部解析 Promise 是一种流行的做法,而在此之前,我们不得不通过延迟类(Deferred)来实现:
或者从 NPM 安装 – 这会导致多一个依赖项!
但现在 ES15 提供了Promise.withResolvers()
方法:
快速 Promise 一个事件流——await
一个可观察对象:
缓冲区性能升级
缓冲区是用于存储应用程序生成的临时数据的微型数据存储区。
使用缓冲区可以非常方便地在管道的各个阶段传输和处理数据。
管道列表:
- 文件处理: 输入文件 → 缓冲区 → 处理 → 新缓冲区 → 输出文件
- 视频流: 网络响应 → 缓冲区 → 显示视频帧
- 餐厅队列: 接待顾客 → 队列/缓冲区 → 接待顾客
有了缓冲区,每个阶段都可以以不同的速度独立处理数据。
但是当通过管道的数据超出缓冲区容量时会发生什么?
以前我们必须将所有当前数据的缓冲区复制到更大的缓冲区。
性能非常糟糕,尤其是当管道中有大量数据时。
ES15 为我们提供了解决这个问题的方法:可调整大小的数组缓冲区。
异步升级
Atomics.waitAsync()
是 ES15 中另一个强大的异步编码功能:
当 2 个代理共享一个缓冲区时…
代理 1 “休眠 ”并等待代理 2 完成任务。
当代理 2 完成任务时,它会使用共享缓冲区作为通道发出通知。
这个功能与一般的 async/await 类似/相同。
但最大的区别在于两个代理可以存在于完全不同的代码上下文中,它们只需要访问同一个缓冲区。
而且多个代理可以在不同时间访问或等待共享缓冲区,其中任何一个代理都可以通知 “唤醒 ”所有其他代理。
这就像一个 P2P 网络,而 async/await 更像客户端-服务器的请求-响应。
正则表达式 v 标志和设置操作
全新功能让 regexes 更简洁、更直观。
借助集合运算,可以使用富有表现力的模式查找和处理复杂字符串:
例如匹配不断增加的 Unicode 字符集:
- 表情符号:😀、❤️、👍、🎉等。
- 重音字母:é、à、ö、ñ 等。
- 符号和非拉丁字符:©、®、€、£、µ、¥ 等
在这里我们使用 Unicode 正则表达式 和 v 标志来匹配所有希腊字母: