服務器端 JavaScript 平台 Node.js 20.0 可用

Node.js 20.0 已經發布,這是一個用 JavaScript 執行網絡應用程序的平台。 Node.js 20.0 已被分配到長期支持分支,但要到 20 月份穩定後才會分配此狀態。 Node.js 30.x 將支持到 2026 年 18 月 2025 日。 之前的 Node.js 16.x LTS 分支的維護將持續到 2023 年 14 月,之前的 30.x LTS 分支的維護將持續到 19 年 1 月。 XNUMX.x LTS 分支將於 XNUMX 月 XNUMX 日停止維護,Node.js XNUMX.x 臨時分支將於 XNUMX 月 XNUMX 日停止維護。

主要改進:

  • V8 引擎已更新至版本 11.3,在 Chromium 113 中使用。與使用 Chromium 19 引擎的 Node.js 107 分支相比,其中的更改包括 String.prototype.isWellFormed 和 toWellFormed 函數、Array.prototype和 TypedArray.prototype 方法,用於處理 Array 和 TypedArray 對象更改時的複制、RegExp 中的“v”標誌、支持調整 ArrayBuffer 大小和增加 SharedArrayBuffer 大小、WebAssembly 中的尾部調用。
  • 提出了一種實驗性權限模型機制,允許您在執行期間限制對某些資源的訪問。 通過在運行時指定“--experimental-permission”標誌來啟用權限模型支持。 在最初的實現中,提出了限制對 FS 某些部分、子進程 (--allow-child-process) 的寫入 (--allow-fs-write) 和讀取 (--allow-fs-read) 訪問的選項、附加組件(--no-addons)和線程(--allow-worker)。 例如,要允許寫入 /tmp 目錄並讀取 /home/index.js 文件,您可以指定:node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read =/home/index.js 索引.js

    要檢查訪問權限,建議使用 process.permission.has() 方法,例如“process.permission.has('fs.write',"/tmp/test")。

  • 通過“--experimental-loader”選項加載的 ECMAScript 外部模塊 (ESM) 的處理程序現在在與主線程隔離的單獨線程中執行,從而消除了應用程序代碼和加載的 ESM 模塊的交集。 與瀏覽器類似, import.meta.resolve() 方法現在在從應用程序內調用時同步執行。 在 Node.js 的下一個分支中,計劃將 ESM 加載支持移至穩定功能類別。
  • node:test (test_runner) 模塊旨在創建和運行以 TAP(測試任何協議)格式返回結果的 JavaScript 測試,已移至穩定版本。
  • 一個單獨的性能團隊已經成立,為新分支做準備,該團隊致力於加速各種運行時組件,包括 URL 解析、fetch() 和 EventTarget。 例如,初始化EventTarget的開銷減半,URL.canParse()方法的性能顯著提高,計時器的效率也得到提高。 此外,還發布了一個用C++編寫的高性能URL解析器——Ada 2.0。
  • 以單個可執行文件(SEA,單個可執行應用程序)的形式交付應用程序的實驗性功能的開發仍在繼續。 創建可執行文件現在需要替換從 JSON 配置文件生成的 blob(而不是替換 JavaScript 文件)。
  • 改進了 Web Crypto API 與其他項目實現的兼容性。
  • 添加了對 ARM64 系統上的 Windows 的官方支持。
  • 繼續支持 WASI(WebAssembly 系統接口)擴展,用於創建獨立的 WebAssembly 應用程序。 不再需要指定特殊的命令行標誌來啟用 WASI 支持。

Node.js 平台既可用於 Web 應用程序的服務器維護,也可用於創建常規客戶端和服務器網絡程序。 為了擴展Node.js應用程序的功能,已經準備了一個大的模塊集合,您可以在其中找到實現HTTP、SMTP、XMPP、DNS、FTP、IMAP、POP3服務器和客戶端的模塊、用於集成的模塊具有各種 Web 框架、WebSocket 和 Ajax 處理程序、DBMS 連接器(MySQL、PostgreSQL、SQLite、MongoDB)、模板引擎、CSS 引擎、加密算法和授權系統(OAuth)的實現、XML 解析器。

為確保處理大量並行請求,Node.js 使用基於非阻塞事件處理和回調處理程序定義的異步代碼執行模型。 支持的多路復用連接方法有 epoll、kqueue、/dev/poll 和 select。 對於連接多路復用,使用了 libuv 庫,它是 Unix 系統上的 libev 和 Windows 上的 IOCP 的附加組件。 使用libeio庫創建線程池,集成c-ares以非阻塞方式進行DNS查詢。 所有導致阻塞的系統調用都在線程池內部執行,然後像信號處理程序一樣,通過一個未命名的管道(pipe)將它們的工作結果傳回。 JavaScript 代碼的執行是通過使用 Google 開發的 V8 引擎提供的(此外,微軟正在開發一個帶有 Chakra-Core 引擎的 Node.js 版本)。

Node.js 的核心類似於 Perl AnyEvent、Ruby Event Machine、Python Twisted 框架和 Tcl 事件實現,但 Node.js 中的事件循環對開發人員是隱藏的,類似於運行中的 Web 應用程序中的事件處理在瀏覽器中。 在為 node.js 編寫應用程序時,您需要考慮事件驅動編程的細節,例如,而不是執行“var result = db.query("select..");” 等待工作完成和後續處理結果,Node.js採用了異步執行的原理,即代碼被轉換為“db.query(“select..”, function (result) {result processing});”,其中控制將立即傳遞給進一步的代碼,查詢結果將在數據到達時進行處理。

來源: opennet.ru

添加評論