自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Node.js 21 正式發(fā)布,趕緊來看看有哪些更新吧!

開發(fā) 前端
10 月 17 日,Node.js 21 正式發(fā)布,其取代了 Node.js 20 成為當(dāng)前版本,而 Node.js 20 則被推廣為長(zhǎng)期支持版本(LTS)。下面就來看看 Node.js 21 有哪些更新吧!

版本說明

這兩個(gè)版本有什么區(qū)別呢?Node.js 21 適合在特定環(huán)境下進(jìn)行早期功能測(cè)試,而 Node.js 20 LTS 則適用于生產(chǎn)部署。Node.js 21 將在未來 6 個(gè)月內(nèi)成為“當(dāng)前”版本,直到 2024 年 4 月。以下是完整的 Node.js 發(fā)布計(jì)劃。

Node.js 的發(fā)布可以分為三個(gè)階段,奇數(shù)版本號(hào)的發(fā)布線路不會(huì)被提升為 LTS 版本,也就不會(huì)經(jīng)歷“Active LTS”和“Maintenance”階段。

  • Current(當(dāng)前):包含大部分進(jìn)入 nodejs/node 主分支的非主要(非破壞性)變更。
  • Active LTS(活躍長(zhǎng)期支持):新功能、錯(cuò)誤修復(fù)和經(jīng)LTS團(tuán)隊(duì)審核后被確定適合該發(fā)布線路且穩(wěn)定的更新。
  • Maintenance(維護(hù)):關(guān)鍵錯(cuò)誤修復(fù)和安全更新。新功能可能會(huì)根據(jù)LTS團(tuán)隊(duì)的判斷加入。通常只在新功能支持遷移到后續(xù)發(fā)布線路的情況下才會(huì)添加。

如果你想要嘗試最新的Node.js功能,那么 Node.js 21 是個(gè)很好的測(cè)試平臺(tái),它提供了即將到來的新特性的先期體驗(yàn)。Node.js 的發(fā)布計(jì)劃特別關(guān)注這一點(diǎn)。但是如果正在準(zhǔn)備或已經(jīng)在生產(chǎn)環(huán)境中使用 Node.js,則應(yīng)該選擇較穩(wěn)定的版本,如Node.js 20 和 18 LTS。這些版本可以保證可靠性和穩(wěn)定性,并且會(huì)在較長(zhǎng)時(shí)間內(nèi)得到支持和維護(hù)。

Node.js 21 的亮點(diǎn)包括將 V8 JavaScript 引擎升級(jí)到 11.8 版本,穩(wěn)定的WebStreams和 fetch功能,一個(gè)用于更改模塊默認(rèn)值的新實(shí)驗(yàn)性標(biāo)志(--experimental-default-type),對(duì)測(cè)試運(yùn)行器的許多更新,內(nèi)置 WebSocket 客戶端等!

主要更新

穩(wěn)定的WebStreams和 fetch功能

Node.js 21 對(duì)fetch模塊和WebStreams進(jìn)行了重要更新,并將它們標(biāo)記為穩(wěn)定版本。

這一變化影響到了WebStreams、FormData、Headers、Request、Response和fetch等模塊。

內(nèi)置 WebSocket 客戶端

這個(gè)版本新增了一個(gè)實(shí)驗(yàn)性的瀏覽器兼容的 WebSocket 實(shí)現(xiàn),可以通過使用參數(shù)--experimental-websocket來開啟。但是,像所有實(shí)驗(yàn)性功能一樣,它可能會(huì)隨時(shí)發(fā)生變化。

V8 11.8

按照慣例,Node.js 21 中包含了新版本的 V8 引擎(更新到版本11.8,該版本是 Chromium 118 的一部分),帶來了性能的改進(jìn)和新的語(yǔ)言功能,包括:

  • 數(shù)組分組
  • ArrayBuffer.prototype.transfer
  • 擴(kuò)展的 WebAssembly 常量表達(dá)式

Node.js 測(cè)試運(yùn)行器支持通配符

在 Node.js 21 中,測(cè)試運(yùn)行器引入了對(duì)通配符表達(dá)式的支持。通配符是一種模式語(yǔ)法,可以用來匹配多個(gè)文件路徑。在測(cè)試過程中,可以使用通配符表達(dá)式來指定要運(yùn)行的測(cè)試文件。

通過使用通配符表達(dá)式,可以更方便地選擇和執(zhí)行特定類型的測(cè)試文件,而不需要一個(gè)個(gè)地指定它們的路徑。例如,如果想運(yùn)行所有具有.test.js文件擴(kuò)展名的文件,無論這些文件位于哪個(gè)目錄下,可以使用類似于node --test **/*.test.js的命令。這樣,測(cè)試運(yùn)行器會(huì)自動(dòng)匹配并執(zhí)行符合該模式的測(cè)試文件。

ESM:支持改變模塊默認(rèn)值

experimental-default-type 是 Node.js 的一個(gè)實(shí)驗(yàn)性特性,可以用來切換默認(rèn)的模塊系統(tǒng)。這意味著開發(fā)者可以使用不同的模塊類型,并在需要時(shí)進(jìn)行切換,使得 Node.js 應(yīng)用更加靈活,能夠應(yīng)對(duì)不同的場(chǎng)景。

標(biāo)志 --experimental-default-type=module 用于將模塊類型切換成 ES 模塊。對(duì)于已經(jīng)明確定義為 ES 模塊或 CommonJS 的代碼,例如在 package.json "type" 字段中或文件擴(kuò)展名為 .mjs/.cjs 或 --input-type 標(biāo)志等,不會(huì)受到影響。在使用 --experimental-default-type=module 標(biāo)志時(shí),原本默認(rèn)解析為 CommonJS 的代碼將被解析成 ES 模塊。

此外,Node.js 團(tuán)隊(duì)還在探索使用檢測(cè) ES 模塊語(yǔ)法作為Node.js識(shí)別文件是否為ES模塊的一種方式,目標(biāo)是最終找到一種支持ES模塊語(yǔ)法的方法,并盡可能減少變更。

模塊自定義鉤子 globalPreload 已被移除,改用 register 和 initialize

模塊自定義鉤子 globalPreload 已被移除。取而代之的是,使用 register 方法將數(shù)據(jù)從應(yīng)用線程發(fā)送到自定義鉤子,并使用 initialize 鉤子在線程之間建立通信通道。

fs.writeFile 函數(shù)添加 flush 選項(xiàng)

在寫入文件時(shí),有可能數(shù)據(jù)并不會(huì)立即刷新到永久存儲(chǔ)中。這可能導(dǎo)致后續(xù)讀取操作看到舊的數(shù)據(jù)。該版本為 fs.writeFile 系列函數(shù)添加了一個(gè) flush 選項(xiàng),該選項(xiàng)可以在成功寫入操作結(jié)束時(shí)強(qiáng)制刷新數(shù)據(jù)到永久存儲(chǔ)。

性能

性能是一個(gè)運(yùn)行時(shí)的重要屬性,@nodejs/performance 團(tuán)隊(duì)在過去一年中一直努力改進(jìn) URL、fetch、streams、node:fs 和 HTTP 等方面的性能。

Streams

Node.js 流團(tuán)隊(duì)不斷優(yōu)化可寫流和可讀流。在這個(gè)版本中,通過移除冗余檢查、利用位圖以及以更高效的方式安排回調(diào)來進(jìn)一步優(yōu)化流操作。

HTTP

在此之前,當(dāng)向分塊響應(yīng)寫入數(shù)據(jù)時(shí),無論響應(yīng)是否處于 corked 狀態(tài),Node.js 都會(huì)為每個(gè) .write(...)調(diào)用創(chuàng)建一個(gè)單獨(dú)的數(shù)據(jù)塊。這會(huì)在客戶端和服務(wù)端都產(chǎn)生不必要的開銷。

該更新通過在取消 corked 狀態(tài)時(shí),為所有 write(...) 調(diào)用創(chuàng)建一個(gè)單一的數(shù)據(jù)塊來解決了這一問題。

考慮以下基于 Transfer-Encoding 文檔的示例:

res.cork();
res.write('Mozilla');
res.write(' Developer Network');
res.uncork();

在每個(gè)數(shù)據(jù)塊的開頭,您需要以十六進(jìn)制格式添加當(dāng)前數(shù)據(jù)塊的長(zhǎng)度,然后跟著 '\r\n',再接著是數(shù)據(jù)塊本身,最后再加上另一個(gè) '\r\n'。終止塊是正常的數(shù)據(jù)塊,唯一的例外是它的長(zhǎng)度為零。

最終生成的響應(yīng)流為:

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
7\r\n
Mozilla\r\n
18\r\n
 Developer Network\r\n
0\r\n
\r\n

在 Node.js 21 中,當(dāng)取消 corked 狀態(tài)時(shí),所有數(shù)據(jù)塊都會(huì)合并成一個(gè)單獨(dú)的數(shù)據(jù)塊,從而減少了很多不必要的開銷。

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
25\r\n
Mozilla Developer Network\r\n
0\r\n
\r\n

llhttp 9.1.2 強(qiáng)制嚴(yán)格模式執(zhí)行

  • 在以前的 Node.js 版本中,默認(rèn)情況下未啟用嚴(yán)格模式。在 Node.js 21 中,強(qiáng)制執(zhí)行了以前包含在嚴(yán)格模式中的所有設(shè)置,提高了代碼的可靠性和安全性。
  • 現(xiàn)在,標(biāo)頭后面必須有 \r\n(之前允許單獨(dú)使用 \r)。此外,數(shù)據(jù)塊后必須有 \r\n,以確保一致的數(shù)據(jù)處理。
  • 在解析帶有 Connection: close 標(biāo)頭的消息后不再允許傳輸數(shù)據(jù)。這一變化增強(qiáng)了協(xié)議遵從性并改善了連接處理。

為適應(yīng)特定的用例,引入了--insecure-http-parser 標(biāo)志。該選項(xiàng)允許用戶禁用上述更改,并保持與以前的解析行為的向后兼容性。

這些更新旨在增強(qiáng)整個(gè)系統(tǒng)的穩(wěn)定性,并改善 Node.js 應(yīng)用的數(shù)據(jù)處理一致性。鼓勵(lì)開發(fā)人員審查其代碼庫(kù)并相應(yīng)地調(diào)整其實(shí)現(xiàn),以確保與最新版本的無縫集成。

navigator 對(duì)象集成

在 Node.js 21 中,引入了全局 navigator 對(duì)象,增強(qiáng)了 Web 的互操作性?,F(xiàn)在,可以通過 navigator.hardwareConcurrency 訪問硬件并發(fā)信息。

責(zé)任編輯:姜華 來源: 前端充電寶
相關(guān)推薦

2017-09-12 16:28:31

MySQLMySQL 8.0.3變化

2017-06-02 10:00:26

前端Node.js

2023-10-20 10:11:00

Nuxt 3.8前端

2024-05-24 08:35:00

Angular 18版本更新

2023-06-28 08:52:36

2023-04-19 08:31:57

Node.jsLTS版本

2024-01-31 12:13:22

2022-05-23 10:26:50

Node.jsJavaScrip

2024-11-18 08:58:26

2021-10-26 06:43:36

NodeJavaScript引擎

2017-09-22 14:04:33

前端Node.js新特性

2015-06-23 15:27:53

HproseNode.js

2024-02-21 09:43:50

ElectronNode.js前端

2023-10-11 10:03:33

Electron桌面應(yīng)用開發(fā)工具

2023-12-06 09:02:56

Electron前端

2024-04-18 08:04:47

ElectronChrome升級(jí)

2020-05-07 14:59:52

iOS 13.5蘋果更新

2018-10-20 09:00:00

UbuntuUbuntu 18.1Cosmic Cutt

2021-06-21 09:04:36

Windows 11系統(tǒng)設(shè)計(jì)

2024-04-26 09:03:31

Node.jsCurrent發(fā)布版
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)