1638 字
8 分鐘

Node.js 26.9.0 要升級嗎?先看 Current、node:bench 與 FFI 邊界

Node.js v26.9.0 已於 2026 年 9 月 16 日發布,現在屬於 Current,不是 LTS。這一版的重點包含 node:bench、FFI module 預設可用、Web Workers,以及幾個和 OpenSSL、Histogram、嵌入式 runtime 有關的能力;它適合拿來驗證新功能,不代表所有 production service 都應立即換版。

先講結論:如果你的 production 目標是穩定的 LTS,先留在目前支援中的 LTS,另外用 CI 或 preview 環境試跑 Node 26.9.0。只有在確實需要 node:bench、FFI、Web Workers 或新版 runtime 行為時,才把升級列為近期工作,並先完成 native module、權限與 TLS 回歸測試。

26.9.0 帶來哪些值得評估的能力#

能力你可能想用它做什麼升級前要注意
node:bench把 benchmark 以 Node 原生 runner 執行仍屬 Early Development,執行時要加 --experimental-bench
node:ffi從 JavaScript 呼叫 native library仍是 experimental;使用 Permission Model 時要明確允許 FFI
Web Workers評估標準 Web Worker API 的 runtime 支援和既有 worker_threads、bundler 與測試環境分開驗證
Generic MAC API使用 OpenSSL provider 提供的 MAC 演算法檢查 provider、演算法名稱與部署環境一致性
OpenSSL provider discovery發現 provider 提供的 cipher/hash不要假設每台機器的 OpenSSL provider 完全相同
Histogram API取得 meanCI 或匯出/匯入 CBOR檢查監控序列化與跨版本資料格式

這些是 release notes 列出的能力,不是本文已在本機 Node 26.9.0 執行過的結果。升級決策要把「官方已提供」和「你的 dependency tree 已支援」分開看。

Current 和 LTS 怎麼選#

Node.js 的 release schedule 讓 Current 先取得新功能,LTS 則以較長的維護週期和生態穩定性為優先。可以用下面的判斷:

情境建議
Production API、背景 worker、商業站台預設使用目前支援中的 LTS,除非有明確功能需求
需要驗證 node:bench、FFI 或 Web Workers建立獨立 CI/preview job 使用 Node 26.9.0
維護 native addon 或 OpenSSL 整合先做雙版本 matrix,確認建置、載入與 runtime 行為
只想取得效能改善但沒有版本需求先量測目前 LTS,再用相同 workload 比較 Current

不要用「Current 有新 API」當成單獨升級理由。Current 的價值是讓團隊提前驗證下一個 runtime 世代;production 是否切換,還要看套件、部署平台、監控與 rollback 是否準備好。

node:bench 的使用邊界#

Node 26.9.0 的 node:bench 是原生 benchmark module,但文件目前標示為 Stability 1.0、Early Development。執行 benchmark 時要明確加上 --experimental-bench,例如:

Terminal window
node --experimental-bench --bench benchmark.mjs

升級檢查時應注意三件事:

  1. benchmark process 的隔離和預設執行方式可能與你現有的 npm test 不同。
  2. 不能把 benchmark 結果直接當成 production latency;要固定硬體、Node flags、輸入資料與 warm-up。
  3. 先把原本的 benchmark 保留,再新增 node:bench 版本,避免工具更換後失去跨版本基準。

如果只是要跑應用程式測試,不需要為了使用 Node 26.9.0 而在 production 開啟 --experimental-bench。它是測量工具,不是一般 request path 的必要 runtime flag。

FFI 為什麼要另外做安全審查#

FFI 能讓 JavaScript 呼叫 native library,能力比純 JavaScript module 更接近作業系統和程序邊界。Node 26.9.0 的 FFI module 變成預設可用,但仍是 experimental;若同時使用 Node Permission Model,必須把 FFI 權限明確列入啟動政策,官方 CLI 選項是 --allow-ffi

在評估前先回答:

  • native library 的檔案路徑是否固定且可驗證?
  • library 的 ABI、架構和 container base image 是否一致?
  • production 是否真的需要 FFI,還是可以用既有 addon、WebAssembly 或外部服務?
  • Permission Model、sandbox、部署使用者與 crash recovery 是否已測試?
  • FFI 失敗時,是否會讓整個 process 終止或留下不可重試的部分狀態?

不要因為 module 可以 import 就把它直接放進主要服務。先在隔離 worker 或短生命週期 job 驗證,再決定是否接受 native code 的更新與資安維護成本。

一份可重複的升級檢查流程#

先把版本差異變成 CI matrix,而不是直接改 production image:

Node 目前的 LTS ─┐
├─ install --frozen-lockfile → typecheck → test → build
Node 26.9.0 ─┘

實際檢查至少包含:

  1. node --version、package manager 版本與 lockfile 是否一致。
  2. pnpm install --frozen-lockfile 或專案既有的 immutable install。
  3. TypeScript、unit test、integration test、build 與 smoke test。
  4. native addon、SQLite、image、crypto、TLS、DNS 和 child process 等邊界。
  5. container、serverless runtime、CI runner 和本機開發環境的 CPU/OS 架構。
  6. 監控指標、memory、event loop delay、error rate 與 rollback image。

若沒有明確的 26.9 功能需求,先完成「CI 可通過且可快速回退」就已經足夠;不需要把 Current 版本立即推到所有使用者。

哪些回歸最容易被漏掉#

Native module 與 ABI#

安裝成功不代表 runtime 載入成功。把需要編譯或載入 .node binary 的套件列出,在和 production 相同的 base image 執行一次 cold start。

OpenSSL provider 與加密流程#

26.9.0 增加 provider discovery 與 generic MAC 相關能力。若應用程式依賴 cipher/hash 名稱、FIPS provider 或特定 OpenSSL build,請比較實際部署環境,不要只在開發者筆電通過。

Worker 與測試工具#

Web Workers 和 worker_threads 不應直接視為同一個 API;測試 bundler、module format、終止行為與 observability。node:bench 也應和 production test script 分開,避免 experimental flag 意外進入部署指令。

權限與啟動參數#

如果應用程式使用 Permission Model,將新權限寫進啟動設定與部署文件,並用「沒有權限時應該失敗」的測試驗證 policy 真的生效。這和現有 Node.js 24 Permission Model 檢查是同一種治理思路:先列出能力,再讓 CI 驗證邊界。

結論:把 26.9.0 當成可驗證的 Current#

Node.js 26.9.0 的價值在於提前提供 node:bench、FFI、Web Workers 與 OpenSSL/Histogram 相關能力;它目前是 Current,不是 LTS。對大多數 production 服務,合理路徑是保留 LTS 作為預設、在 CI/preview 建立 26.9.0 matrix,只有在功能需求和回歸證據都成立時才擴大部署。

常見問題#

Q: Node.js 26.9.0 是 LTS 嗎?#

A: 不是。它是 Current。請以 Node.js 官方 release schedule 判斷目前 LTS,再依專案的支援矩陣決定 production 版本。

Q: node:bench 不加 flag 可以執行嗎?#

A: 官方文件目前要求使用 --experimental-bench 啟用 benchmark runner。把這個 flag 留在 benchmark script,不要無意間放進一般應用程式啟動命令。

Q: FFI 預設可用就代表沒有安全風險嗎?#

A: 不是。FFI 仍是 experimental,且會引入 native library 的 ABI、檔案路徑、記憶體與權限風險。使用 Permission Model 時還要明確處理 --allow-ffi,並先在隔離環境完成回歸。

參考資料:

Node.js v26.9.0 Release

Node.js Documentation:node:bench

Node.js Documentation:Modules and node:ffi

Node.js:Node.js Releases

Node.js 26.9.0 要升級嗎?先看 Current、node:bench 與 FFI 邊界
https://laplusda.com/posts/node-26-9-0-current-upgrade-checklist/
作者
Zero
發佈於
2026-09-19
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。