Node 20:最新版本的 Node v20 有哪些新功能?
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.domainToASCII和url.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
這會將 blob 寫入sea-prep.blob文件。
這種 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 Releases或Node 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)目需求和要求做出正確的選擇。
(言鼎科技)