node.js的引擎是「Chrome V8」。Node.js主要由Chrome V8引擎、標準庫和本地模組組成;其中,V8引擎負責解析和執行JavaScript程式碼,它將JS程式碼直接編譯成原生機器碼,並且使用快取機制來提高效能。
本教學操作環境:windows7系統、nodejs 12.19.0版,DELL G3電腦。
nodejs是什麼?
Node.js 是一個基於 Chrome V8 引擎的 JavaScript 執行環境。
Node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。
簡單的說 Node.js 就是執行在伺服器端的 JavaScript,利用JavaScript在伺服器端進行程式設計。
Node.js是一個讓JavaScript執行在伺服器端的開發平臺,它讓JavaScript的觸角伸到了伺服器端,可以與PHP、JSP、Python、Ruby平起平坐。
Node.js不是一種獨立的語言,與PHP、JSP、Python、Perl、Ruby的「既是語言,也是平臺」不同,Node.js使用JavaScript進行程式設計,執行在JavaScript引擎上(V8)。
nodejs開發的構成就成利用npm開發的社群提供的大量的第三方包加上基本的ECMAScript指令碼語言以及node平臺提供的一系列程式設計介面進行程式設計。
Node.js 的組成
Node.js 執行時主要由 V8 引擎、標準庫和本地模組組成,尤其是本地模組的多少,從底層決定了 Node.js 功能的強弱。
1) V8 引擎
V8 引擎就是 JavaScript 直譯器,它負責解析和執行 JavaScript 程式碼。
V8 引擎借鑑了 Java 虛擬機器器和 C++ 編譯器的眾多技術,它將 JavaScript 程式碼直接編譯成原生機器碼,並且使用了快取機制來提高效能,這使得 JavaScript 的執行速度可以媲美二進位制程式。
2) 本地模組
Node.js 整合了眾多高效能的開源庫,它們使用 C/C++ 語言實現,比如:
模組 | 說明 |
---|---|
libuv | 一個跨平臺的、基於事件驅動的非同步 I/O 庫。但是 libuv 不僅限於 I/O,它還提供了程序管理、執行緒池、訊號處理、定時器等其它功能。 Linux 中一切皆檔案,這裡的 I/O 不僅僅包括檔案讀寫,還包括資料庫讀寫、網路通訊(socket)等。 |
nmp | Node.js 包管理器,可以下載包、安裝包、解除安裝包、更新包、上傳包等。 |
http_parser | 一款由C語言編寫的輕量級 HTTP 解析器,用以支援 Web 應用開發。 |
zlib | 工業級的資料壓縮/解壓模組,Nodejs 藉助 zlib 來建立同步、非同步或者流式的壓縮/解壓介面。 |
OpenSSL | 該模組提供了經過嚴密測試的許多加密/解密功能,現代 Web 依賴這些功能來實現安全性,比如 SSL 協定和 https 協定。 |
c-ares | 非同步 DNS 查詢和解析庫。 |
Node.js 直接在計算機上執行 JavaScript 程式碼,並且要賦予 JavaScript 強大的能力,所以它的本地模組和瀏覽器中的執行時有很多大區別,甚至說幾乎沒有什麼關聯。Node.js 幾乎完全拋棄了瀏覽器,自己從頭構建了一套全新的 JavaScript 執行時。
3) 標準庫
本地模組使用 C/C++ 編寫,而 Node.js 面向 JavaScript 開發人員,所以必須要封裝本地模組的 C/C++ 介面,提供一套優雅的 JavaScript 介面給開發人員,並且要保持介面在不同平臺(作業系統)上的一致性。
這套 JavaScript 介面,就是 Node.js 標準庫。標準庫是否優雅和強大,決定了 Node.js 的易用性,直接影響 Node.js 的市場表現。
小結
V8 引擎和眾多本地模組都是現成的,別人已經造好了輪子,Node.js 的主要工作就是選擇合適的模組,將它們整合在一起,並編寫好 JavaScript 介面。
當然,並不是所有的本地模組都能找到合適的,Node.js 也自己編寫了幾個模組,典型的代表就是 Libuv。Libuv 是 Node.js 最核心最基礎的模組,Node.js 完全基於 Libuv 而構建。
你可能聽說過 Node.js 採用了基於事件的、單執行緒的非同步 I/O 架構,這是 Node.js 最大的特點,也是它和其它指令碼語言最大的區別,Node.js 的這種能力就是依賴 Libuv 實現的。
Libuv 如此強大,官方決定將它從 Node.js 中剝離出來,作為一個單獨的網路庫釋出,並且開源免費。現在的 Libuv 已經變得非常流行,和傳統的 Libevent 和 libev 庫並稱為「C/C++ 三大網路庫」。
Node.js 之所以大名鼎鼎,主要是因為它採用了 V8 引擎和 Libuv 庫:V8 引擎保證了 Node.js 執行高效,Libuv 庫提供了基於事件迴圈的非同步 I/O 能力。
總結
Node.js 是一個 JavaScript 執行時,它讓 JavaScript 脫離了瀏覽器環境,可以直接在計算機上執行,極大地拓展了 JavaScript 用途。我們應該將 JavaScript 和 Python、Java、Ruby 等其它程式語言同等對待,不能再將它視為一種「小玩意」。
最後我們來彙總一下 JavaScript 和 Node.js 的歷史:
Netscape 瀏覽器衍生出了 JavaScript 指令碼,賦予網頁程式設計能力;
Chrome 瀏覽器衍生了 V8 引擎,提高了 JavaScript 效能;
V8 引擎構建了 Node.js,拓展了 JavaScript 的程式設計能力;
Node.js 衍生了 Libuv 庫,給網路開發增加了一款優秀的工具。
更多node相關知識,請存取:!
以上就是node.js的引擎是什麼的詳細內容,更多請關注TW511.COM其它相關文章!