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

言鼎科技 2023-05-19 715

Node.js 團(tuán)隊(duì)和社區(qū)始終遵循相同的傳統(tǒng),并憑借 Node 19 的巨大成功,以其最新的功能和更新打破世界范圍內(nèi)的障礙。Node.js 社區(qū)帶著最新版本的 Node.js 20 回歸。在這篇博文中,我們介紹了Node 20的新增功能和更新。此外,我們還為開發(fā)人員社區(qū)和企業(yè)主整理了有關(guān) Node 20 引入的更改的信息。我們還概述了 Node v20 發(fā)布后當(dāng)前 Node 19 的升級。

介紹

Node.js 20 以其最新功能和新更新將開發(fā)者社區(qū)推向了另一個(gè)高度。這次 Node 的開發(fā)團(tuán)隊(duì)將Node 20 的發(fā)布日期定在了 2023 年 4 月 18 日由于 Node 社區(qū)遵循活動慣例,Node.js 20 將于2023 年 10 月升級為 Long-Term Support 或 LTS 版本。并將支持到2026 年 4 月。但是,考慮到Node 20的新增功能和更新,讓我們繼續(xù)了解更多信息。

Node 20 的新增功能和更新

最新的 Node 版本 20 在性能、錯(cuò)誤處理等方面比之前的版本進(jìn)行了許多升級和功能。讓我們詳細(xì)介紹 Node.js 20 的所有這些最新功能和更新:

?? Node.js 權(quán)限模型

權(quán)限模型功能由Rafael Gonzaga提供給 Node.js v20 。它是一種實(shí)驗(yàn)性機(jī)制,旨在使開發(fā)人員能夠在程序運(yùn)行的同時(shí)限制對特定資源的訪問,例如文件子進(jìn)程生成、系統(tǒng)操作和工作線程創(chuàng)建。

要訪問此功能,開發(fā)人員必須啟用–實(shí)驗(yàn)許可,這將限制對所有可用權(quán)限的訪問。借助此功能,開發(fā)人員可以避免對敏感數(shù)據(jù)進(jìn)行不必要的訪問或更改,或在其應(yīng)用程序中執(zhí)行有害代碼。

要了解有關(guān)權(quán)限模型的更多信息,請查看Node.js 文檔。

?? 自定義 ESM Loader Hooks 更穩(wěn)定

通過加載程序提供的自定義掛鉤(–experimental-loader=./foo.mjs)現(xiàn)在有一個(gè)專門的線程來運(yùn)行,與主線程分開,為加載程序提供不同的范圍,并確保加載程序和應(yīng)用程序代碼之間沒有交叉污染。

?? 同步 import.meta.resolve()

與瀏覽器行為保持一致,import.meta.resolve函數(shù)現(xiàn)在同步返回。但是,用戶仍然可以根據(jù)自己的喜好將加載程序解析掛鉤定義為異步或同步函數(shù)。即使加載了異步解析掛鉤,import.meta.resolve仍然會在應(yīng)用程序代碼中同步返回。

?? V8 升級到 11.3

在 Michael Zasso 的貢獻(xiàn)下,Node.js 20 中包含了新版本的 V8 引擎。在這里,V8 引擎更新到版本 11.3,這是 Chromium 113 的一部分,帶來了性能增強(qiáng)和新的語言功能,例如:

  • WebAssembly 尾調(diào)用

  • 帶有集合符號的 RegExp v 標(biāo)志 + 字符串的屬性

  • 可調(diào)整大小的 ArrayBuffer 和可增長的 SharedArrayBuffer

  • String.prototype.isWellFormed 和 toWellFormed

  • 通過復(fù)制改變 Array 和 TypedArray 的方法

?? 穩(wěn)定的測試運(yùn)行器

Node.js 版本 19中,test_runner 模塊是實(shí)驗(yàn)性的,但 Colin Ihrig 的貢獻(xiàn)現(xiàn)在在最新的 Node.js 版本 20 中,更新并標(biāo)記為穩(wěn)定。因此,它已準(zhǔn)備好用于生產(chǎn)。盡管如此,某些部分仍然需要穩(wěn)定性,包括記者和代碼覆蓋率。

?? 性能提升

Node.js 團(tuán)隊(duì)在新版本的 NodeJS 中帶來了一些卓越的性能增強(qiáng)。自上一個(gè)主要版本以來,新成立的 Node.js 性能團(tuán)隊(duì)一直專注于性能增強(qiáng)。此外,Node.js 20 還對運(yùn)行時(shí)的基本部分進(jìn)行了多項(xiàng)改進(jìn),包括 URL、fetch() 和 EventTarget.

啟動 Even Target 的成本降低了一半,同時(shí)可以更快地訪問使用它的所有子系統(tǒng)。此外,V8 快速 API 調(diào)用提供了改進(jìn)的 API 性能,例如網(wǎng)址.canParse()和定時(shí)器。

?? Ada 2.0 包含在 Node.js v20 中

在 Yagiz Nizipli 和 Daniel Lemire(用 C++ 編寫的最新版本的 URL 解析器)的貢獻(xiàn)下,Ada 已包含在 Node.js v20 中,從而顯著提高了 URL 解析性能。升級在節(jié)點(diǎn):網(wǎng)址增強(qiáng)url.domainToASCIIurl.domainToUnicode功能。Node.js 20 中最新的 Ada 2.0 集成涵蓋了 Node.js 應(yīng)用程序的各個(gè)方面,確保比其先前版本 Ada 1.0.4 具有更好的性能,并消除了 URL 主機(jī)名解析中的 ICU 先決條件。

您是在尋找行業(yè)專家來幫助擴(kuò)展您的 Node.js 應(yīng)用程序還是從頭開始創(chuàng)建一個(gè)新應(yīng)用程序?
從 Bacancy聘請 Node.js 開發(fā)人員,在競爭中脫穎而出。今天!

?? 準(zhǔn)備 SEA 現(xiàn)在需要注入一個(gè) Blob

去年,Node js 團(tuán)隊(duì)一直致力于支持 SEA 或單一可執(zhí)行應(yīng)用程序,最近初步支持落地;由于該功能仍處于實(shí)驗(yàn)階段,該團(tuán)隊(duì)將繼續(xù)改進(jìn)這一點(diǎn)。但是,在Node 20中,構(gòu)建單個(gè)可執(zhí)行應(yīng)用程序現(xiàn)在需要從 JSON 配置中注入由 Node.js 準(zhǔn)備的 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 注入提供了將多個(gè)共存資源嵌入 SEA 的選項(xiàng)。

?? 網(wǎng)絡(luò)加密 API

Node.js 20 版本中的另一個(gè)重要功能是根據(jù)其 WebIDL 定義強(qiáng)制和驗(yàn)證 Web Crypto API 函數(shù)的參數(shù),這與 Web Crypto API 的其他實(shí)現(xiàn)相同并促進(jìn)互操作性。這里的目標(biāo)是關(guān)注與其他 JavaScript 環(huán)境的互操作性。

?? 官方支持 ARM64 Windows

根據(jù) Stefan Stojanovic 的意見,ARM64 Windows 升級到第 2 層支持。因此,Node v20 現(xiàn)在包含 ARM64 Windows 二進(jìn)制文件,允許在平臺上本地執(zhí)行。與其他平臺一樣,Node.js 下載站點(diǎn)提供對 MSI、zip/7z 包和可執(zhí)行文件的訪問。同時(shí),CI系統(tǒng)也進(jìn)行了升級,便于在ARM64 Windows上進(jìn)行全面測試,從而防止任何回歸并確保兼容性。Stefan Stojanovic 負(fù)責(zé)將 ARM64 Windows 提升到第 2 層支持。

?? 現(xiàn)在必須指定 WASI 版本

Node.js 開發(fā)團(tuán)隊(duì)繼續(xù)在 WASI 或 Web Assembly 系統(tǒng)接口實(shí)現(xiàn)方面取得進(jìn)展;雖然它是實(shí)驗(yàn)性的,但不需要命令行選項(xiàng)來啟用 WASI,這將使它更容易使用。隨著專注于 WASI 的團(tuán)隊(duì)準(zhǔn)備發(fā)布預(yù)覽版 2,已實(shí)施多項(xiàng)更改以確保與未來版本的兼容性。此外,在創(chuàng)建新的 WASI() 實(shí)例時(shí)添加了版本選項(xiàng),在創(chuàng)建新的 WASI() 實(shí)例時(shí)添加了版本選項(xiàng),并且在 20.x 版本中,指定版本是強(qiáng)制性的,因?yàn)闆]有默認(rèn)值。雖然這改進(jìn)了對新版本的支持,但它需要更新任何依賴于默認(rèn)版本的代碼。開發(fā)團(tuán)隊(duì)邀請其他有興趣在 Node.js 中使用 WASI 或在 Node.js 環(huán)境之外使用的 uvwasi 的貢獻(xiàn)者。

?? 棄用和刪除

在 Node.js 20 更新中,url.parse()已在運(yùn)行時(shí)使用無效端口棄用,如[3bed5f11e0]– (SEMVER-MAJOR) 在代碼庫中。這是因?yàn)?/span>url.parse()允許具有非數(shù)字端口的 URL,這可能會導(dǎo)致意外輸入并可能促進(jìn)主機(jī)名欺騙。為了減輕這些風(fēng)險(xiǎn),從 Node.js v20 開始的 Node.js 的未來版本將在遇到此類 URL 時(shí)拋出錯(cuò)誤。這與已經(jīng)遵循這種方法的 WHATWG URL API 保持一致。從 Node.js 20 開始,url.parse()將為此類 URL 發(fā)出警告。

??雜項(xiàng)

這些不是它;Node.js 版本 20 帶來了幾個(gè)通用的其他功能和升級:

  • 通過更快的啟動時(shí)間增強(qiáng)性能。

  • 改進(jìn)了對 TLS 1.3 和更重要的安全通信加密技術(shù)的支持。

  • 更好的 TypeScript 支持。

  • 更好的調(diào)試體驗(yàn)。

  • 有效的錯(cuò)誤處理。

  • 要了解有關(guān)最新 Node 20 功能和更新的更多信息,請?jiān)L問 GitHub Node ReleasesNode 20 Release Announce

    結(jié)論

    這就是最新的 Node v20 版本帶來的好處。這篇博文一定讓您深入了解了 Node 20 的最新功能和更新。但是,如果您是使用 Node.js 進(jìn)行 Web 應(yīng)用程序開發(fā)的企業(yè)主并且不確定是否應(yīng)該升級到最新版本的 Node,那么您可以聘請像 Bacancy 這樣的Node.js 開發(fā)公司來幫助您獲得信心并根據(jù)您的項(xiàng)目需求和要求做出正確的選擇。

言鼎科技

The End