Node.js 22 发布概述
Node.js 团队最近发布了 Node.js 22,主要特点包括增强了对 JavaScript 原生模块和 Web API 的兼容性,并进行了性能改进。
主要特性
JavaScript 模块支持增强:
- Node.js 21 已经支持了关键的 JavaScript 模块 API,如
import.meta对象,具体包括import.meta.dirname和import.meta.filename。 Node.js 22 新增了对同步
requireJavaScript 模块(ESM)图的支持。具体来说,如果启用了--experimental-require-module标志,并且 ECMAScript 模块满足以下条件:- 在最近的
package.json中明确标记为 ES 模块("type": "module")或使用.mjs扩展名。 - 完全同步(不包含顶层
await)。
- 在最近的
- 则
require()将加载请求的模块作为 ES 模块,并返回模块命名空间对象。类似于动态import(),但同步执行并直接返回命名空间对象。未来计划默认启用require(esm),无需标志。
- Node.js 21 已经支持了关键的 JavaScript 模块 API,如
WebSocket 支持:
- Node.js 21 已经部分支持
NavigatorAPI 和实验性的浏览器兼容Websocket客户端。 - Node.js 22 中,
Websocket支持仍然是实验性的,但默认启用,开发者不再需要使用标志激活。
- Node.js 21 已经部分支持
性能改进
V8 引擎更新:
- Node.js 22 将 V8 JavaScript 引擎更新到 12.4 版本,引入了名为 Maglev 的优化 JIT 编译器,位于现有的 Sparkplug 和 Turbofan 编译器之间。
- V8 12.4 版本新增了 WebAssembly 垃圾回收和迭代器助手(Iterator Helpers)等功能。
流性能提升:
- Node.js 流的性能通过将高水位标记(High Water Mark)从 16KiB 提高到 64KiB 得到改进。由于这会略微增加内存使用,内存敏感的环境可以通过
setDefaultHighWaterMark()调整默认值。
- Node.js 流的性能通过将高水位标记(High Water Mark)从 16KiB 提高到 64KiB 得到改进。由于这会略微增加内存使用,内存敏感的环境可以通过
其他性能改进:
fetch()API 和测试运行器的性能通过提高AbortSignal实例创建的效率得到提升。
开源与贡献
Node.js 是 MIT 许可下的开源软件,由 Open JS Foundation 维护。鼓励通过 Node.js 贡献指南和行为准则进行贡献和反馈。
代码示例
以下是一个简单的代码示例,展示了 Node.js 22 的新特性:
// ES 模块: math.js
export function add(a, b) {
return a + b;
}
// CommonJS 模块: app.js
const { add } = require('./math.js');
console.log(add(2, 3)); // 输出: 5 总结来说,Node.js 22 在模块支持、Web API 兼容性和性能方面都有显著提升,进一步巩固了其在现代 JavaScript 生态系统中的地位。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。