网易首页 > 网易号 > 正文 申请入驻

Node.js 22:服务器端 JavaScript 的未来

0
分享至

作者 | Marco Ippolito

译者 | 许学文

策划 | Tina

本文探讨了 Node.js 22 的全新特性和改进。

随着 Node.js 22 版本的发布,Node.js 继续突破创新,为开发者提供新的工具和增强性功能,帮助他们创建强大、高效的应用程序。本文将探讨 Node.js 22 给我们带来的一些令人兴奋的新功能和改进。

V8 引擎升级至 12.4 版本

V8 引擎升级至 12.4 版本是该版本的重要更新之一。本次 V8 升级为我们带来了许多新功能和改进。以下是此次升级的内容。

WebAssembly 垃圾回收

该版本的亮点之一是引入了 WebAssembly 垃圾回收。这一功能增强了 WebAssembly 代码的内存管理,提高了应用程序的性能和效率。

Array.fromAsync

引入了一个新方法 Array.fromAsync 。该方法允许开发者基于异步可迭代对象异步创建数组。下面是一个简单的例子:

async function* asyncIterable() {
for (let i = 0; i < 5; i++) {
await new Promise((resolve) => setTimeout(resolve, 10 * i));
yield i;
}
}
const array = Array.fromAsync(asyncIterable); // [0, 1, 2, 3, 4]

Sets 方法

为 Sets 添加了诸如 union(并集)、intersection(交集)和 difference(差集)等多个新方法。这些新增的方法不但简化了 Sets 操作,而且可以方便开发者执行一些常见的集合运算。请看下面这个例子:

const lts = new Set([18, 20, 22]);
const nonLts = new Set([17, 19, 21]);

const all = lts.union(nonLts); // 并集 [18, 20, 22, 17, 19, 21]

all.intersection(nonLts); // 交集 [17, 19, 21]

all.difference(nonLts); // 差集 [18, 20, 22]

迭代器辅助方法

这些辅助方法包括 take、drop 和 map 等。它们使得操作和处理迭代器的值变得更加简便。以下是一些示例:

function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}

// 取 TOP 5
for (const n of fibonacci().take(5)) {
console.log(n);
}

// 取 TOP 5,然后丢弃 TOP 2
for (const n of fibonacci().take(5).drop(2)) {
console.log(n);
}

// 将每个数值平方
for (const n of fibonacci().map((x) => x ** 2)) {
console.log(n);
}

同步加载 ESM 模块

同步加载 ECMAScript 模块(ESM)是 Node.js 22 中最受期待的功能之一。借助 --experimental-require-module 标志,开发者现在可以使用 require() 来同步加载 ESM 模块。这一特性解决了开发者从 CommonJS 过渡到 ESM 时的一个常见痛点。现在,包作者可以在不中断用户体验的情况下,逐步将代码中的 CommonJS 迁移到 ESM。与此同时,它还能解决因模块重复而导致的 node_modules 目录膨胀问题。下面是一个简单的例子:

导出 ESM 模块

// sum.mjs
export default function sum(a, b) { return a + b }

在 CommonJS 中使用 ESM 模块

// index.cjs
const sum = require('./sum.mjs')
console.log(sum(1,2)) // it works!

执行代码

node --experimental-require-module index.cjs

但需要注意的是,虽然同步加载 ESM 模块有显著的优势,但仍然存在一些需要考虑的边缘情况和功能之间的相互影响。例如,与其他实验性功能之间的相互影响或涉及循环依赖的场景,可能需要进一步完善。尽管如此,Node.js 22 中这一实验性功能的初步实现为未来的改进和迭代奠定了基础。

WebSocket 客户端

在 Node.js 22 中,WebSocket 客户端实现(源自 Undici)现已默认启用,无需再依赖外部库。这一内置的 WebSocket 支持不仅简化了开发流程,还确保了与现代 Web 标准的兼容性。以下是示例代码:

// 创建 WebSocket 连接
const socket = new WebSocket("ws://localhost:8080");
// 连接打开
socket.addEventListener("open", (event) => {
socket.send("Hello Server!");
});

Package.json 脚本执行

通过新增的 --run 标志,开发者现在可以直接从 package.json 执行脚本。这一实验性功能简化了在项目 package.json 中定义的公共任务和工作流程的执行过程,从而改善了开发体验。

开发者现在可以使用 --run 标志直接执行 package.json 中 'scripts' 属性定义的命令。如果未提供具体命令,则会列出所有可用的脚本。

当使用 --run 标志时,Node.js 会将当前工作目录下的 ./node_modules/.bin 路径预先添加到 PATH 中。这样就可以执行依赖项中的二进制文件了。

要在当前文件夹中执行 package.json 中的 test 脚本,只需运行如下命令:

node --run test

需要注意的是,node --run 的目的不在于复制 npm run 的行为或其他包管理器中类似的命令。相反,它因为把一些常见用例的性能表现作为优先事项而有意限制了某些功能:

  • 不会在当前文件夹之外搜索 package.json 文件。

  • 不会预先添加当前文件夹之外的 .bin 或 node_modules/.bin 路径。

  • 执行指定脚本的时候,不会一起执行 pre 或 post 脚本。

  • 不支持定义特定于包管理器的环境变量。

    稳定版的监听模式

监听模式(Watch Mode)之前是一项实验性功能,现在已经稳定。

如果你不熟悉 Node.js 的监听模式,可以将它理解为一种功能。当该功能开启时,每当检测到被监听文件发生更改时,它会自动重启 Node.js 进程。这意味着在开发和测试过程中,不再需要手动重启或中断 Node.js 进程。要开启该功能,只需在启动 Node.js 应用程序时添加 --watch 标志即可。

默认情况下,它只会监听入口文件和任何被引用或导入的模块。不过,开发者可以通过 --watch-path 标志来自定义此行为,按需指定要监听的特定路径。

下面是个简单的示例:

node --watch index.js

然后,如果你想设置特定路径,则可以使用下面的命令:

node --watch-path=./src --watch-path=./tests index.js

需要注意的是,--watch-path 目前仅支持 macOS 和 Windows 。如果尝试在不支持该标志的平台上使用则会引发异常。

Glob(文件路径匹配) 和

GlobSync(同步文件路径匹配)

Node.js 22 引入了用于模式匹配的 glob 和 globSync 函数。开发者现在可以使用这些函数根据指定的模式来匹配文件路径。

import { glob } from 'node:fs';

glob('**/*.js', (err, matches) => {
if (err) throw err;
console.log(matches);
});

import { globSync } from 'node:fs';

console.log(globSync('**/*.js'));

Maglev 带来性能提升

在支持的系统架构上,Node.js 22 会默认启用 V8 引擎的 Maglev 编译器,显著提升了生命周期较短的命令行程序的性能。

Maglev 是继 TurboFan 和 SparkPlug 之后,V8 引擎阵容中的第三个编译器。

TurboFan 的优点是可以生成高度优化的机器码,但其缺点是编译时间较长;SparkPlug 则优先考虑编译速度而非代码优化。而 Maglev 兼具二者之长,它所生成的代码在执行速度上要显著快于 SparkPlug,并且编译速度也远超 TurboFan。

Maglev 通过优化 CPU 使用,提高了 Node.js 应用程序的整体效率,从而缩短了执行时间并改善了资源利用率。

Stream 的默认高水位标记

在 Node.js 22 中,Stream 的默认高水位标记从 16KiB 增加到 64KiB,从而显著提升了性能。虽然这一变化可能会多占用一些内存,但其带来的速度和效率上的提升远远超过了任何缺点,对于需要处理大量数据的应用程序来说尤其如此。同时,这一更新也反映了自 Node.js 创建以来,现代计算机能力的提升以及技术的不断进步和发展。

废弃和移除

作为持续维护和改进工作的一部分,Node.js 22 还包括了若干弃用和移除项,旨在简化代码库并推广最佳实践。特别是,移除了许多不应公开的加密构造函数和旧的工具方法。建议开发者查看下弃用列表,并制定相应地规划,以确保与 Node.js 未来版本的兼容性。

总 结

Node.js 22 标志着 Node.js 平台演进过程中的又一重要里程碑,它引入了新功能,提升了性能,并改进了开发体验。

欢迎探索 Node.js 22 的最新版本,并尝试这些新功能。

一如既往,社区的反馈和贡献在塑造 Node.js 的未来方面发挥着至关重要的作用。因此,请不要犹豫,积极参与进来,分享您的想法和建议。

https://www.nearform.com/digital-community/node-js-22-the-future-of-server-side-javascript/

声明:本文由 InfoQ 翻译,未经许可禁止转载。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
人老了确实没太大意思,我妈今年72岁,独自在家每天就做这两件事

人老了确实没太大意思,我妈今年72岁,独自在家每天就做这两件事

心理观察局
2026-05-04 11:19:11
国际原油快速拉升

国际原油快速拉升

每日经济新闻
2026-05-04 23:35:04
讽刺拉满!国乒男团两连败,樊振东沦陷,瑞典球员的话字字戳心窝

讽刺拉满!国乒男团两连败,樊振东沦陷,瑞典球员的话字字戳心窝

阿纂看事
2026-05-04 21:14:03
俄罗斯、沙特、伊拉克等七国重磅宣布

俄罗斯、沙特、伊拉克等七国重磅宣布

鲁中晨报
2026-05-03 19:29:02
22岁吴宜泽大心脏 遭5连鞭后拒崩盘 轰3-0回击墨菲 再胜5局即夺冠

22岁吴宜泽大心脏 遭5连鞭后拒崩盘 轰3-0回击墨菲 再胜5局即夺冠

我爱英超
2026-05-04 23:32:51
斯诺克世锦赛快讯:吴宜泽顶住压力,距离夺冠仅差3局,剑指冠军

斯诺克世锦赛快讯:吴宜泽顶住压力,距离夺冠仅差3局,剑指冠军

郝小小看体育
2026-05-05 03:32:54
略显仓促,李金羽正常出席赛前发布会,两小时后铁人官宣其下课

略显仓促,李金羽正常出席赛前发布会,两小时后铁人官宣其下课

懂球帝
2026-05-04 17:53:22
高市放话准备战斗,解放军深夜发出重磅信号,“大刀”已准备就绪

高市放话准备战斗,解放军深夜发出重磅信号,“大刀”已准备就绪

石江月
2026-05-02 19:11:37
轻断食再次封神!复旦大学研究证实:让肝脏脂肪在3月内少20.5%?

轻断食再次封神!复旦大学研究证实:让肝脏脂肪在3月内少20.5%?

橘子约定
2026-05-04 18:26:27
俄副部长叛逃美国,俄军每天最低伤亡千人,仍在组织新攻势!

俄副部长叛逃美国,俄军每天最低伤亡千人,仍在组织新攻势!

知兵
2026-05-04 16:06:33
95岁巴菲特押注世纪大暴跌:手握4000亿现金,真正的聪明人都在等风暴

95岁巴菲特押注世纪大暴跌:手握4000亿现金,真正的聪明人都在等风暴

新浪财经
2026-05-04 17:51:45
中国地震局迅即开展四川省成都市邛崃市3.1级地震应急处置工作

中国地震局迅即开展四川省成都市邛崃市3.1级地震应急处置工作

环球网资讯
2026-05-04 20:44:50
“山西订婚强奸案”男子刑满释放回家 其母:刚回来状态有些紧张,以后要好好生活

“山西订婚强奸案”男子刑满释放回家 其母:刚回来状态有些紧张,以后要好好生活

红星新闻
2026-05-04 18:24:32
豆包宣布即将收费,最高一年使用费 5088 元

豆包宣布即将收费,最高一年使用费 5088 元

XCiOS俱乐部
2026-05-04 16:45:10
硅谷华裔工程师回国两周后,反而更看好美国了?

硅谷华裔工程师回国两周后,反而更看好美国了?

回旋镖
2026-05-04 11:10:15
砸2600亿!武汉存储扩产计划曝光:长江存储产能翻番 剑指全球第三

砸2600亿!武汉存储扩产计划曝光:长江存储产能翻番 剑指全球第三

三言四拍
2026-05-04 16:16:39
别信!别围观!多地街头出现,深圳也有!网友直呼看不下去

别信!别围观!多地街头出现,深圳也有!网友直呼看不下去

南方都市报
2026-05-04 16:24:38
争议?19岁留洋红星庆祝李金羽下课!曾在铁人共事1年半+不受重用

争议?19岁留洋红星庆祝李金羽下课!曾在铁人共事1年半+不受重用

我爱英超
2026-05-04 20:30:35
特朗普称将启动霍尔木兹海峡被困船只疏导行动,马克龙表示法国不参与;此前伊朗武装部队称将打击接近或进入霍尔木兹海峡的美军

特朗普称将启动霍尔木兹海峡被困船只疏导行动,马克龙表示法国不参与;此前伊朗武装部队称将打击接近或进入霍尔木兹海峡的美军

大风新闻
2026-05-04 15:30:02
戴手套!“72小时可夺命”,又有人中招了

戴手套!“72小时可夺命”,又有人中招了

番禺台
2026-05-04 11:37:55
2026-05-05 04:08:49
InfoQ incentive-icons
InfoQ
有内容的技术社区媒体
12331文章数 51875关注度
往期回顾 全部

科技要闻

在中国市场搞「付费订阅」,豆包咋想的?

头条要闻

媒体:霍尔木兹海峡一声惊雷炸响 战争的引信已经点燃

头条要闻

媒体:霍尔木兹海峡一声惊雷炸响 战争的引信已经点燃

体育要闻

骑士破猛龙:加雷特·阿伦的活力

娱乐要闻

张敬轩还是站上了英皇25周年舞台

财经要闻

魔幻的韩国股市,父母给婴儿开户买股票

汽车要闻

同比大涨190% 方程豹4月销量29138台

态度原创

家居
艺术
本地
公开课
军事航空

家居要闻

灵动实用 生活艺术场

艺术要闻

震惊!43岁妈妈晒女儿合影,30万网友猜测身份!

本地新闻

用青花瓷的方式,打开西溪湿地

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

特朗普回绝伊朗新方案

无障碍浏览 进入关怀版