Node 10、12、14、16 版本的更新比对
Node 10
- vm: add dynamic import support。支持动态的 import。
但 ES 模块仍旧属于实验性质,并不能在代码中直接使用 import/export 除非开启实验性质的 flag,想使用还是得参见如何在 NodeJS 中写 ES6 import。
- Updated nghttp2 to 1.34.0. This adds RFC 8441 extended connect protocol support to allow use of WebSockets over HTTP/2。将 nghttp2 更新为 1.34.0。这增加了 RFC 8441 扩展连接协议支持,以允许通过 HTTP/2 使用 WebSockets。
Node 8 引入了一个实验性的 HTTP/2 模块,这次是对 Node 的一次很好的升级。 HTTP/2 改进了标准的 HTTP 协议,有着多路复用,单一连接,服务器推送,头压缩等先进处,此次还修复了一些安全性的问题,并且还加上 websocket 的支持。
- Adding Error Codes。现在,Node中的错误信息已被标准化。
- The n-api is no longer experimental. [cd7d7b15c1]。N-API 不再是实验性功能
Node文档将 N-API 描述为构建本地插件的 API。 它独立于底层的 JavaScript 运行时(ex V8),并作为 Node.js 本身的一部分进行维护。 这个 API 将是跨 Node.js 版本稳定的应用程序二进制接口(ABI)。 它旨在将 Addons 与基础 JavaScript 引擎中的更改隔离,并允许为一个版本编译的模块在更高版本的 Node.js 上运行,而无需重新编译。
-
patch V8 to 6.6.346.24。Node 停止使用 Chromium 中的 V8 引擎,而使用 v8 的 6.6 版本,
-
改进了诊断追踪。Node 10 添加了跟踪事件,为开发人员提供更多关于其Node.js应用程序可见性。在启动 node 应用时,添加参数 --trace-event-categories可以将其打开,可以文档里了解到更多
-
update npm to 6.14.3。更新 NPM 6,npm的这一版本增加了所有各种改进,包括性能,安全性和稳定性
-
upgrade openssl sources to 1.1.1e。Node配备了现代加密支持,可支持备受期待的 ChaCha20 密码和 Poly1305 验证器
-
fs: remove experimental warning for fs.promises。fs 可直接使用 promise 了,不再需要像 Node 8 中使用 util.promisify()函数进行转换。
const fs = require('fs');
const fsPromises = fs.promises;
// 同步读取
console.log(fs.readFileSync('temp.txt', 'utf8'));
// promise 读取,感觉更麻烦了。
async function doRead() {
let filehandle = null;
try {
filehandle = await fsPromises.open('temp.txt', 'r+');
let read = await filehandle.readFile();
console.log(read);
} finally {
if (filehandle) {
// 如果文件已打开,则关闭文件。
await filehandle.close();
}
}
}
doRead().catch(console.error);
Node 12
- update V8 to 7.4.288.13。其中可以使用 Async 调用栈追踪了。
- 集成 Heap Dumps,打印堆快照功能,方便定位内存泄漏。参加util: integrate node-heapdump into core 获取更多信息
- properly configure default heap limits,使用更合适的默认堆内存限制。V8 会使用默认的的方案(32位系统上是 700MB 的限制,64位系统则是 1400MB,当然会检测机器是否有这么高的内存,没有的会也会缩减占用)根据可用内存来配置堆内存限制确保了 Node.js 不会因为使用超出可用内存而导致异常退出。这在处理大型数据集时特别有用。和以前一样,如果默认值不适合您的应用程序,通过设置 max-old-space-size 仍然可以使用不同的限制。
- switch default parser to llhttp (Anna Henningsen)。使用 llhttp 替换了默认的 http 解析器。并且 llhttp 的版本是 2.0.4。llhttp 在 v11.2.0 中首次作为llhttp experimental 引入,在此版本中,llhttp 将不再作为 experimental。有关于 llhttp,参见llhttp是如何使Node.js性能翻倍的?
- Worker Threads,Worker Threads 已经不再需要 flag 了。
- Node.js 12 带来了支持 ES6 Module 的最新实验版本。但仍旧不能直接在代码里使用它,想使用还是得参见如何在 NodeJS 中写 ES6 import。
Node 14
- ECMAScript Modules - Experimental Warning Removal
In Node.js 13 we removed the need to include the --experimental-modules flag, but when running EcmaScript Modules in Node.js, this would still result in a warning ExperimentalWarning: The ESM module loader is experimental.
自 Node 13 开始可以直接使用 ES Modules 但是会报警,Node 14 后可以使用并且不报警了。
- V8 升级到 8.1
- ArrayBuffer 使用新的 V8 ArrayBuffer API
- openssl sources 更新到 1.1.1
- Console groupIndentation option。console 可以配置超过两个空格的长度。
Node 16
- 稳定的 Timers Promises API,Node 15 时存在的这个 API 终于在 16 进入稳定。
- V8 升级到 9.0 版本,主要有 ECMAScript RegExp Match Indices 更新
- npm 升级到了 7.x
- btoa 与 atob。此前 Node 提供过 Buffer.from 来做 base64 转化,此次提供这两个 API 与浏览器环境保持了一致。