Node.js 22.0 发布,这是一个用 JavaScript 运行网络应用程序的平台。 Node.js 22.0 被归类为长期支持分支,但只有在稳定后的 22 月份才会分配此状态。 Node.js 30.x 将支持到 2027 年 20 月 2026 日。 Node.js 18.x 之前的 LTS 分支的维护将持续到 2025 年 21 月,前年的 LTS 分支 1.x 的维护将持续到 2024 年 XNUMX 月。 Node.js XNUMX.x 的暂存分支将于 XNUMX 年 XNUMX 月 XNUMX 日停止。
主要改进:
- V8 引擎已更新至版本 12.4,在 Chromium 124 中使用。与使用 V21 8 引擎的 Node.js 11.8 分支相比,其中的变化包括:
- 支持 WasmGC 扩展,简化了将使用垃圾收集器的编程语言(Kotlin、PHP、Java 等)编写的程序移植到 WebAssembly。 WasmGC 添加了可以使用非线性内存分配的新型结构和数组。
- 支持 Array.fromAsync() 方法,该方法异步返回从类数组、可迭代或异步可迭代对象复制的 Array 对象的新实例。
- 支持迭代器方法,例如 .map、.filter、.find、.take、.drop、.forEach 和 .reduce。
- 支持 Set 对象,该对象定义值的集合并提供实现常见集合操作的方法,例如交集、并集、差集和加法。
- Maglev 优化 JIT 编译器默认启用,旨在为频繁使用的 JavaScript 代码快速生成高性能机器代码。启用 Maglev 可以显着加快不执行长期操作的短期 CLI 应用程序的速度,例如,完成 Jetstrea 测试的时间减少了 7.5%,Speedometer 测试的时间减少了 5%。
- 通过将 highWaterMark 选项的值从 16 KB 增加到 65 KB(定义缓冲记录的上限),流的处理速度得到了加快。此更改会导致内存消耗增加,因此设计为在有限 RAM 上运行的应用程序可能需要通过调用 setDefaultHighWaterMark() 恢复到旧值。
- 通过提高 AbortSignal 实例化的效率,提高了 fetch() 和测试运行器 API 的性能。与文件系统同步工作相关的 API 的性能已得到改进。
- 提供了一项实验性功能,可使用“require()”调用以同步模式加载 JavaScript ESM 模块(ECMAScript 模块)。 ESM 模块在浏览器中使用,并替换特定于 Node.js 的 CommonJS 模块。要通过“require()”加载,ESM 模块必须以同步模式执行(顶层没有等待)。通过“--experimental-require-module”标志启用支持。
- 添加了使用“--run”命令运行 package.json 文件中定义的脚本的实验功能”
- “node –watch”命令已移至稳定类别,并实现了监视模式,确保在导入的文件发生更改时重新启动进程(例如,如果执行“node –watch index.js”,则当index.js发生变化时,进程将自动重新启动)。
- WebSocket API 的本机实现已经稳定,允许在客户端模式下使用 WebSocket,而无需安装额外的依赖项。
- 添加了对 Navigator API 的部分支持。
- Webstreams API 添加了对 deflate-raw 压缩格式的支持。
- 向 node:fsmodule 添加了 glob 和 globSync 函数,用于文件路径的模式匹配。
- 改进了对错误配置的 IPv6 堆栈的处理。实施 Happy Eyeballs 算法,以便在 IPv6 操作出现问题时快速回滚。
- util API 已被弃用。
- 更新的依赖项版本:npm 10.5.1、libuv 1.48.0、simdutf 5.2.3、c-ares 1.28.1、zlib 1.3.0.1-motley-24c07df、simdjson 至 3.8.0、ada 2.7.7 和 undici 6.6.0 。
Node.js 平台既可用于 Web 应用程序的服务器端支持,也可用于创建标准的客户端和服务端网络程序。为了扩展 Node.js 应用程序的功能,我们准备了大量的模块,其中包括实现各种功能的模块。 服务器 以及 HTTP、SMTP、XMPP、DNS、FTP、IMAP、POP3 客户端,用于与各种 Web 框架集成的模块,WebSocket 和 Ajax 处理程序,与 DBMS(MySQL、PostgreSQL、SQLite、MongoDB)的连接器,模板引擎,CSS 引擎,加密算法和授权系统(OAuth)的实现,XML 解析器。
为了处理大量并行请求,Node.js 使用基于非阻塞事件处理和定义回调处理程序的异步代码执行模型。支持的多路复用连接方法包括 epoll、kqueue、/dev/poll 和 select。对于连接复用,使用 libuv 库,它是 Unix 系统上 libev 和 Windows 上 IOCP 的附加组件。 libeio库用于创建线程池,并集成c-ares以非阻塞模式执行DNS查询。所有导致阻塞的系统调用都在线程池中执行,然后像信号处理程序一样,通过无名管道将其工作结果传回。
JavaScript 代码的执行是通过使用 Google 开发的 V8 引擎来确保的(此外,微软正在开发带有 Chakra-Core 引擎的 Node.js 版本)。从本质上讲,Node.js 类似于 Perl AnyEvent、Ruby Event Machine、Python Twisted 框架以及 Tcl 中的事件实现,但 Node.js 中的事件循环对开发人员是隐藏的,类似于 Web 应用程序中的事件处理在浏览器中运行。
来源: opennet.ru
