Node.js 19 在 2022-10-18 正式發布了,此次更新包括將 V8 JavaScript
引擎更新到 10.7
,以及默認啟用 HTTP (s)/1.1 KeepAlive
。
Node.js 18 在本月晚些時候將進入長期支持(LTS
),Node.js 19 將取代 Node.js 18 成為 “Current
” 版本。
官方文檔
node –watch (實驗性)
運行時,增加了一個令人興奮的功能,支持使用 node --watch
,選項在 “watch
” 模式下運行。在 “watch
” 模式下運行,當導入的文件被改變時,會重新啟動進程。
|
|
此功能在 v19.0.0
和 v18.11.0+
中可用。
默認啟用 HTTP(S)/1.1 KeepAlive
從這個版本開始,Node.js 默認將 keepAlive
設置為 true
,這意味著任何出站的 HTTP (s)
連線將自動使用 HTTP 1.1 Keep-Alive
。默認的 keep-alive 時間是 5
秒。
啟用 keep-alive
將提供更好的吞吐量,因為連接在默認情況下被重複使用。
穩定的 WebCrypto
WebCrypto API 現在已經穩定(以下算法除外:Ed25519、Ed448、X25519 和X448)
使用 globalThis.crypto
或 require('node:crypto').webcrypto
來訪問這個模塊。
自定義 ESM Resolution 調整
Node.js 已經刪除了 --experimental-specifier-resolution
標誌,其功能現在可以通過自定義加載器實現。
移除 DTrace/SystemTap/ETW 支持
對 DTrace/SystemTap/ETW 的支持在 v19.0.0 中被移除,主要原因是資源的優先級問題。
如果你有興趣幫助恢復 DTrace,可以查看該 issue:https://github.com/nodejs/node/issues/44550。
依賴
V8 10.7
V8 引擎已經更新到 10.7 版本,這是 Chromium 107 的一部分。這個版本包括了 JavaScript API 的一個新特性:Intl.NumberFormat
。
Intl.NumberFormatv3 API 是一個新的 TC39 ECMA402 第三階段提案,擴展了先前存在的 Intl.NumberFormat
。
llhttp
Node.js 19 搭載了 [email protected]
npm
Node.js 19 搭載了 [email protected]
Node.js 18 將進入 LTS
Node.js 18 系列將在下週過渡到長期支持版本。
生命週期
Node.js 14 將在 2023 年 4 月達到生命週期結束,因此建議用戶開始計劃升級到 Node.js 16(LTS)或 Node.js 18(LTS)。
Node.js 16 (LTS) 將在 2023 年 9 月達到生命週期結束,比原計劃 2024 年 4 月提前了。
更多詳情可查看:https://nodejs.org/en/blog/announcements/v19-release-announce/
補充: Nodejs 16 的新特性
Node 16 於四月二十日發布,山月在第一時間下載了Node16 體驗了以下新特性。偶數號的版本為LTS 版本,這將是既Node14 之後的下一個長期支持版本,Node14 在2020-10-27 已進入 Active LTS
階段,還沒有升級的同學要盡量更新呀。
從 Node 16 Release 官方文檔 列出了此次它所有的新特性以及非常詳細的提交記錄。那它到底更新了哪些新特性,先讓我們一睹為快吧!
Timers Promise API
Timers Promise API
其實在 Node 15 就已存在,那時候是一個實驗特性,目前已進入了穩定階段,是一項令人興奮的特性。那它到底是幹什麼用的呢?
先別急,在此之前,先看一個問題:如何實現一個sleep/delay 函數?
答案也很簡單,使用 Promise 封裝一個 setTimeout
即可
|
|
那有了 Timers Promise
之後呢,使用 setTimeout
直接可替代 sleep
功能,驚不驚喜。
|
|
setTimeout
的第二個參數接收一個值,作為 Promise 成功後的返回值
|
|
而當 setInterval
也變為 Promise 形式後,對於每間隔一分鐘便執行操作的定時任務而言,具有更大的可讀性
|
|
底層依賴升級
我們知道,Node 基於 v8、libuv、llhttp 等諸多依賴,這次它對諸多依賴進行了升級。如同我們的業務項目依賴於諸多軟件包,每一次依賴的升級也會對性能造成不少提升
- v8 升級到
9.0
,主要是 ECMAScript RegExp Match Indices - llhttp 升級到
6.0.0
,用以解析 HTTP 報文 - icu 升級到
69.1
- npm 升級到
7.10.0
使用 process.versions
可看到相關依賴的版本號
|
|
export
|
|
btoa 與 atob
關於 Base64 的轉化,Node 在以前使用了 Buffer.from
,而現在支持 btoa/atob 與瀏覽器環境保持了一致。
而對於一個 SSR 項目而言,執行環境的區分將無關緊要,統一使用 btoa/atob
就好了
|
|
更多
關於 Node16 升級的諸多小細節,可參閱版本發布獲取更多信息,可持續 Wayne’s Blog 對各軟件每一次重大版本升級的說明講解。