Node.js 24已发布,并将于10月转为LTS长期支持版本

boyanx6个月前技术教程16

Node.js 24 相较于当前LTS版本 Node.js 22 引入了许多新功能、性能改进和重大变化。

1. V8 引擎升级

  • Node.js 24: 升级到 V8 13.6(Node.js 22 使用 V8 12.4)。
  • 新 JavaScript 特性
  • 支持 RegExp.escape:简化正则表达式转义。
  • 支持 Explicit Resource Management(using 语句):用于自动资源管理。
  • 支持 Error.isError:更可靠的错误检测。
  • 支持 Float16Array:新的数组类型,优化数值计算。
  • 支持 Intl.DurationFormat:国际化时间格式化。
  • 支持 Promise.try:简化无参数 Promise 创建。
  • 支持正则表达式修饰符和重复命名捕获组。
  • 支持 Atomics.pause:优化多线程操作。
  • 性能提升:V8 13.6 带来更好的内存管理和执行效率,尤其在短生命周期 CLI 程序中。
  • 注意:Node.js 22 默认启用了 Maglev 编译器,但在 22.9.0 后禁用以修复性能回归。Node.js 24 未重新默认启用 Maglev,需手动配置。

2. 核心模块和 API 更新

  • Undici 7.0.0
  • Node.js 24 升级到 Undici 7.0.0(Node.js 22 使用旧版)。
  • 改进 HTTP 客户端性能,支持更新的 HTTP 标准。
  • 增强 fetch() API 的开发体验,适合构建 HTTP 密集型服务。
  • 注意:Undici 7.0.0 包含一些破坏性变化,需检查兼容性。
  • URLPattern 全局化
  • Node.js 24 将 URLPattern 设为全局对象,无需显式导入。
  • 简化 URL 模式匹配,适合路由和解析场景。
  • AsyncLocalStorage 默认使用 AsyncContextFrame
  • 提升异步上下文追踪的性能和可靠性。
  • 开发者需测试现有代码,确保与新行为兼容。
  • 权限模型改进
  • 权限模型标志从 --experimental-permission 改为 --permission。
  • 增强对文件系统、网络等的细粒度控制,适合安全敏感应用。

3. npm 升级

  • Node.js 24: 包含 npm 11(Node.js 22 使用 npm 10)。
  • 主要变化
  • 安装速度更快。
  • 改进安全检查,增强依赖管理。
  • 支持 Node.js ^20.17.0 || >=22.9.0。
  • npm init 新增 type 提示,优化 package.json 创建。
  • 移除 npm hook 命令。
  • --ignore-scripts 现在适用于所有生命周期脚本。
  • 不再回退到旧的 audit 端点,提升可靠性。

4. 测试运行器改进

  • Node.js 24
  • 测试运行器支持自动等待子测试(auto-await subtests),简化异步测试。
  • 增强 glob 模式支持,优化测试覆盖率配置。
  • Node.js 22
  • 测试运行器仍为实验性,功能较少。

5. 废弃和破坏性变化

  • 废弃功能
  • 废弃 SlowBuffer、tls.createSecurePair 等旧 API。
  • 旧式文件系统常量(如 fs.F_OK)逐步淘汰,建议使用现代替代方案。
  • 破坏性变化
  • 移除对 32 位 Windows 系统支持,需升级到 64 位环境。
  • child_process 中 spawn 和 execFile 不再接受 args 参数,需调整代码。
  • 移除 deps/simdutf,可能影响依赖此库的模块。
  • 调整构建配置(如 V8 TLS 和 MSVC 编译支持),可能影响自定义构建。
  • 平台支持
  • macOS 最低版本提升至 13.5。
  • Xcode 最低版本要求 16.1。
  • 移除对 32 位 s390 和 ppc 架构支持,armv7 降级为实验性。

6. 性能优化

  • 流(Streams)
  • Node.js 22 将默认 High Water Mark 从 16KiB 提高到 64KiB,Node.js 24 延续此优化。
  • 提升流处理性能,但内存敏感环境需手动设置 setDefaultHighWaterMark。

其他优化

  • Blob.slice() 性能提升超过 2.5 倍。
  • String.prototype.startsWith 和 endsWith 因 V8 升级而加速。
  • 更高效的 AbortSignal 创建,优化 fetch() 和测试运行器。

7. 其他功能和改进

  • 稳定的功能
  • Node.js 22 稳定的 --run 命令(运行 package.json 脚本)和 Watch 模式在 Node.js 24 中继续完善。
  • WebSocket 客户端默认启用(Node.js 22 移除实验标志)。
  • 实验性功能
  • Node.js 24 引入更多实验性 API(如 SQLite 集成),但未完全稳定。
  • 构建和工具链
  • Windows 构建从 MSVC 切换到 ClangCL,提升编译效率。
  • 增强对 Python 3.13 的支持。

相关文章

前端使用javascript如何进行sleep

很多语言中都有sleep(),delay()等方法,它能让我们的程序不急着去执行下一步操作,而是延迟、等待一段时间。开发实践中经常会遇到需要这样的需求,比如等待几分钟再去检查某一事件是否发生。Java...

JS严格模式:更安全、更高效的代码实践

在JavaScript开发中,严格模式(Strict Mode)是一个非常重要的特性。它从ES5开始引入,旨在让JavaScript代码运行在更严格的条件下,从而提高代码的安全性和性能。本文将详细介绍...

Node.js 原生支持 TypeScript?开发者需要了解的一切

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!随着 Node.js v23.6.0 的发...

Bun 1.0 JavaScript 运行时发布,附带 Windows“实验”版

作者 | 核子可乐、丁晓昀Bun 团队已经为其 JavaScript/TypeScript 运行时公布了 1.0 稳定版,正式版在速度、集成度和兼容性等方面均做出了强有力的承诺。项目缔造者 Jarre...

javascript中const/let/var的用法区别及使用场景

给大家建议使用的优先级:const > let > var 首先const声明常量的好处,一是阅读代码的人立刻会意识到不应该修改这个值,二是防止了无意间修改变量值所导致的错误,另外其实js...

Google的Dart编程语言即将登陆服务器

几天前的I/O开发者大会上,Google悄然宣布,正在努力工作让其Dart编程语言尽快登陆App Engine。这一实现的基础源于该公司最近推出的管理虚拟机以及该服务的定制运行环境支持。然而,由于定制...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。