Node 20:最新版本的 Node v20 有哪些新功能?

言鼎科技 2023-05-19 702

Node.js 团队和社区始终遵循相同的传统,并凭借 Node 19 的巨大成功,以其最新的功能和更新打破世界范围内的障碍。Node.js 社区带着最新版本的 Node.js 20 回归。在这篇博文中,我们介绍了Node 20的新增功能和更新。此外,我们还为开发人员社区和企业主整理了有关 Node 20 引入的更改的信息。我们还概述了 Node v20 发布后当前 Node 19 的升级。

介绍

Node.js 20 以其最新功能和新更新将开发者社区推向了另一个高度。这次 Node 的开发团队将Node 20 的发布日期定在了 2023 年 4 月 18 日由于 Node 社区遵循活动惯例,Node.js 20 将于2023 年 10 月升级为 Long-Term Support 或 LTS 版本。并将支持到2026 年 4 月但是,考虑到Node 20的新增功能和更新,让我们继续了解更多信息。

Node 20 的新增功能和更新

最新的 Node 版本 20 在性能、错误处理等方面比之前的版本进行了许多升级和功能。让我们详细介绍 Node.js 20 的所有这些最新功能和更新:

🟠 Node.js 权限模型

权限模型功能由Rafael Gonzaga提供给 Node.js v20 。它是一种实验性机制,旨在使开发人员能够在程序运行的同时限制对特定资源的访问,例如文件子进程生成、系统操作和工作线程创建。

要访问此功能,开发人员必须启用–实验许可,这将限制对所有可用权限的访问。借助此功能,开发人员可以避免对敏感数据进行不必要的访问或更改,或在其应用程序中执行有害代码。

要了解有关权限模型的更多信息,请查看Node.js 文档

🟠 自定义 ESM Loader Hooks 更稳定

通过加载程序提供的自定义挂钩(–experimental-loader=./foo.mjs)现在有一个专门的线程来运行,与主线程分开,为加载程序提供不同的范围,并确保加载程序和应用程序代码之间没有交叉污染。

🟠 同步 import.meta.resolve()

与浏览器行为保持一致,import.meta.resolve函数现在同步返回。但是,用户仍然可以根据自己的喜好将加载程序解析挂钩定义为异步或同步函数。即使加载了异步解析挂钩,import.meta.resolve仍然会在应用程序代码中同步返回。

🟠 V8 升级到 11.3

在 Michael Zasso 的贡献下,Node.js 20 中包含了新版本的 V8 引擎。在这里,V8 引擎更新到版本 11.3,这是 Chromium 113 的一部分,带来了性能增强和新的语言功能,例如:

  • WebAssembly 尾调用

  • 带有集合符号的 RegExp v 标志 + 字符串的属性

  • 可调整大小的 ArrayBuffer 和可增长的 SharedArrayBuffer

  • String.prototype.isWellFormed 和 toWellFormed

  • 通过复制改变 Array 和 TypedArray 的方法

🟠 稳定的测试运行器

Node.js 版本 19中,test_runner 模块是实验性的,但 Colin Ihrig 的贡献现在在最新的 Node.js 版本 20 中,更新并标记为稳定。因此,它已准备好用于生产。尽管如此,某些部分仍然需要稳定性,包括记者和代码覆盖率。

🟠 性能提升

Node.js 团队在新版本的 NodeJS 中带来了一些卓越的性能增强。自上一个主要版本以来,新成立的 Node.js 性能团队一直专注于性能增强。此外,Node.js 20 还对运行时的基本部分进行了多项改进,包括 URL、fetch() 和 EventTarget.

启动 Even Target 的成本降低了一半,同时可以更快地访问使用它的所有子系统。此外,V8 快速 API 调用提供了改进的 API 性能,例如网址.canParse()和定时器。

🟠 Ada 2.0 包含在 Node.js v20 中

在 Yagiz Nizipli 和 Daniel Lemire(用 C++ 编写的最新版本的 URL 解析器)的贡献下,Ada 已包含在 Node.js v20 中,从而显着提高了 URL 解析性能。升级在节点:网址增强url.domainToASCIIurl.domainToUnicode功能。Node.js 20 中最新的 Ada 2.0 集成涵盖了 Node.js 应用程序的各个方面,确保比其先前版本 Ada 1.0.4 具有更好的性能,并消除了 URL 主机名解析中的 ICU 先决条件。

您是在寻找行业专家来帮助扩展您的 Node.js 应用程序还是从头开始创建一个新应用程序?
从 Bacancy聘请 Node.js 开发人员,在竞争中脱颖而出。今天!

🟠 准备 SEA 现在需要注入一个 Blob

去年,Node js 团队一直致力于支持 SEA 或单一可执行应用程序,最近初步支持落地;由于该功能仍处于实验阶段,该团队将继续改进这一点。但是,在Node 20中,构建单个可执行应用程序现在需要从 JSON 配置中注入由 Node.js 准备的 blob,而不是注入原始 JavaScript 文件。

示例:
sea-config.json

Node 20:最新版本的 Node v20 有哪些新功能?
{
 “主要”:“你好.js”,
 “输出”:“sea-prep.blob”}

这会将 blob 写入sea-prep.blob文件。

Node 20:最新版本的 Node v20 有哪些新功能?
$ node --experimental-sea-config sea-config.json

这种 blob 注入提供了将多个共存资源嵌入 SEA 的选项。

🟠 网络加密 API

Node.js 20 版本中的另一个重要功能是根据其 WebIDL 定义强制和验证 Web Crypto API 函数的参数,这与 Web Crypto API 的其他实现相同并促进互操作性。这里的目标是关注与其他 JavaScript 环境的互操作性。

🟠 官方支持 ARM64 Windows

根据 Stefan Stojanovic 的意见,ARM64 Windows 升级到第 2 层支持。因此,Node v20 现在包含 ARM64 Windows 二进制文件,允许在平台上本地执行。与其他平台一样,Node.js 下载站点提供对 MSI、zip/7z 包和可执行文件的访问。同时,CI系统也进行了升级,便于在ARM64 Windows上进行全面测试,从而防止任何回归并确保兼容性。Stefan Stojanovic 负责将 ARM64 Windows 提升到第 2 层支持。

🟠 现在必须指定 WASI 版本

Node.js 开发团队继续在 WASI 或 Web Assembly 系统接口实现方面取得进展;虽然它是实验性的,但不需要命令行选项来启用 WASI,这将使它更容易使用。随着专注于 WASI 的团队准备发布预览版 2,已实施多项更改以确保与未来版本的兼容性。此外,在创建新的 WASI() 实例时添加了版本选项,在创建新的 WASI() 实例时添加了版本选项,并且在 20.x 版本中,指定版本是强制性的,因为没有默认值。虽然这改进了对新版本的支持,但它需要更新任何依赖于默认版本的代码。开发团队邀请其他有兴趣在 Node.js 中使用 WASI 或在 Node.js 环境之外使用的 uvwasi 的贡献者。

🟠 弃用和删除

在 Node.js 20 更新中,url.parse()已在运行时使用无效端口弃用,如[3bed5f11e0]– (SEMVER-MAJOR) 在代码库中。这是因为url.parse()允许具有非数字端口的 URL,这可能会导致意外输入并可能促进主机名欺骗。为了减轻这些风险,从 Node.js v20 开始的 Node.js 的未来版本将在遇到此类 URL 时抛出错误。这与已经遵循这种方法的 WHATWG URL API 保持一致。从 Node.js 20 开始,url.parse()将为此类 URL 发出警告。

🟠杂项

这些不是它;Node.js 版本 20 带来了几个通用的其他功能和升级:

  • 通过更快的启动时间增强性能。

  • 改进了对 TLS 1.3 和更重要的安全通信加密技术的支持。

  • 更好的 TypeScript 支持。

  • 更好的调试体验。

  • 有效的错误处理。

  • 要了解有关最新 Node 20 功能和更新的更多信息,请访问 GitHub Node ReleasesNode 20 Release Announce

    结论

    这就是最新的 Node v20 版本带来的好处。这篇博文一定让您深入了解了 Node 20 的最新功能和更新。但是,如果您是使用 Node.js 进行 Web 应用程序开发的企业主并且不确定是否应该升级到最新版本的 Node,那么您可以聘请像 Bacancy 这样的Node.js 开发公司来帮助您获得信心并根据您的项目需求和要求做出正确的选择。

言鼎科技

The End