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

Node.js 21.0 發布,這是一個用 JavaScript 運行網頁應用程式的平台。 Node.js 21.0 分支的支援期為 6 個月。 未來幾天,Node.js 20 分支的穩定工作將完成,該分支將獲得 LTS 狀態並支援到 2026 年 18.0 月。 Node.js 2025 之前的 LTS 分支的維護將持續到 16.0 年 2024 月,前年的 LTS 分支 XNUMX 的維護將持續到 XNUMX 年 XNUMX 月。

主要改進:

  • Fetch API 已被宣布穩定,旨在透過網路載入資源並簡化適合在伺服器和客戶端工作的通用 JavaScript 程式碼的編寫。 此實作基於 HTTP/1.1 undici 客戶端的程式碼,並儘可能接近瀏覽器中提供的類似 API。 此 API 包括 fetch() 方法和 Headers 物件。 Request和Response,分別代表HTTP頭、請求和回應。 const res = wait fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = wait res.json(); 控制台.log(資料); }
  • 對 WebStreams API 的支援已經穩定,該 API 提供對透過網路接收的資料流的存取。 該 API 可讓您新增自己的處理程序,這些處理程序可以在資訊通過網路到達時處理數據,而無需等待整個檔案下載。 Node.js 中可用的物件包括 ReadableStream*、TransformStream*、WritableStream*、TextEncoderStream、TextDecoderStream、 CompressionStream 和 DecompressionStream。
  • 新增了WebSocket客戶端的實驗性實現,相容瀏覽器。 為了啟用 WebSocket 支持,提供了「--experimental-websocket」標誌。
  • 新增了使用 JavaScript 模組 ESM(ECMAScript 模組,用於瀏覽器模組)的預設實作而不是 CommonJS(特定於 Node.js)的實驗模式。 此變更不會影響透過 package.json 中的「type」欄位明確定義格式、透過「--input-type」標誌指定的模組,或因檔案副檔名而顯而易見的模組(ESM 為 .mjs,.cjs對於CommonJS)。 但是,啟用新模式時,未明確定義為 CommonJS 的模組(例如,具有「.js」副檔名)將被視為 ESM 模組。 為了啟動新的模組設置,建議使用“--experimental-default-type”標誌。
  • V8 引擎已更新至版本 11.8,在 Chromium 118 中使用,現在支援 ArrayBuffer.prototype.transfer 方法、對陣列進行分組的功能(groupBy 方法)以及用於處理常數的 WebAssembly 指令(i32.add、i32.sub、 i32.mul、i64.add、i64.sub 和i64.mul)。
  • 對 globalPreload 處理程序的支援已停止,轉而支援註冊和初始化對組態模組的呼叫。
  • fs.writeFile 函數中新增了「flush」選項,以強制在每次寫入作業後將資料刷新到磁碟機。
  • 改進了與 URL 解析、取得 API、流、node:fs 和 HTTP 相關的程式碼的效能。
  • 新增了全域導覽器物件。 例如,要取得有關 CPU 核心數量的數據,您可以使用 navigator.hardwareConcurrency 屬性。
  • 在「—test」參數中,新增了對全域遮罩的支持,用於選擇要執行的測試(例如,您可以指定「—test **/*.test.js」)。
  • 捆綁包管理器 npm 10.2.0 和 llhttp 解析器已更新。
  • 對 Visual Studio 2019 和 11.0 之前的 macOS 版本的支援已停止。

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

添加評論