關於 Node.js®
作為一個非同步事件驅動的 JavaScript 執行時,Node.js 旨在構建可擴充套件的網路應用程式。在下面的“hello world”示例中,許多連線可以被併發處理。每次連線時,都會觸發回撥函式,但如果沒有工作要做,Node.js 就會進入休眠狀態。
const { } = ('node:http');
const = '127.0.0.1';
const = 3000;
const = ((, ) => {
. = 200;
.('Content-Type', 'text/plain');
.('Hello World');
});
.(, , () => {
.(`Server running at http://${}:${}/`);
});
這與當今更常見的併發模型(使用作業系統執行緒)形成對比。基於執行緒的網路相對低效且非常難以使用。此外,Node.js 的使用者無需擔心程序死鎖,因為沒有鎖。Node.js 中幾乎沒有函式直接執行 I/O,因此程序永遠不會阻塞,除非使用 Node.js 標準庫的同步方法執行 I/O。因為沒有阻塞,所以在 Node.js 中開發可擴充套件的系統是非常合理的。
如果其中一些語言不熟悉,有一篇關於阻塞與非阻塞的完整文章。
Node.js 在設計上與 Ruby 的 Event Machine 和 Python 的 Twisted 等系統相似並受其影響。Node.js 將事件模型更進一步。它將事件迴圈作為執行時構造而不是庫來呈現。在其他系統中,總會有一個阻塞呼叫來啟動事件迴圈。通常,行為是在指令碼開頭透過回撥定義,然後在結尾透過像 EventMachine::run() 這樣的阻塞呼叫來啟動伺服器。在 Node.js 中,沒有這樣的啟動事件迴圈的呼叫。Node.js 在執行輸入指令碼後簡單地進入事件迴圈。當沒有更多的回撥要執行時,Node.js 會退出事件迴圈。這種行為就像瀏覽器中的 JavaScript——事件迴圈對使用者是隱藏的。
HTTP 在 Node.js 中是一等公民,其設計考慮了流式處理和低延遲。這使得 Node.js 非常適合作為 Web 庫或框架的基礎。
Node.js 設計為無執行緒並不意味著您不能利用環境中的多個核心。可以使用我們的 child_process.fork() API 派生子程序,並且它們被設計為易於通訊。基於同一介面構建的是 cluster 模組,它允許您在程序之間共享套接字,以實現跨核心的負載均衡。
Node.js 官方資源
為確保在使用 Node.js 時的真實性和安全性,請始終使用官方來源。避免信任來自非官方來源的電子郵件、二進位制檔案或下載。
Node.js 官方域名
下載 Node.js 二進位制檔案和訪問官方文件,請僅使用這些域名
- nodejs.org
- nodejs.dev (重定向至 https://nodejs.com.tw)
- iojs.org (重定向至 https://nodejs.com.tw)
官方 npm 包
Node.js 團隊維護以下官方 npm 包作用域
此外,Node.js 團隊還維護由 nodejs-foundation npm 帳戶釋出的包,不過其他與 Node.js 相關的包(如 undici)也可能由與專案緊密相關的貢獻者維護。
使用來自 Node.js 團隊的包可確保您使用的是官方支援的 Node.js 元件。
官方 GitHub 組織
Node.js 及相關專案在以下官方 GitHub 組織下維護
官方溝通渠道
Node.js 和 OpenJS 基金會透過各種官方和社群支援的渠道進行溝通。您可以在參與進來頁面上找到有關如何參與的詳細資訊。
報告網站問題和宕機
如果您遇到 Node.js 網站的問題,請在 Node.js 網站倉庫中報告。有關服務中斷的即時更新,請訪問 Node.js 狀態頁面。