nodejs是基於Chrome JavaScript執行時建立的一個平臺,是讓JavaScript可以執行在伺服器端的開發平臺,主要用於方便地搭建響應速度快、易於擴充套件的網路應用。
本教學操作環境:windows7系統、nodejs 12.19.0版,DELL G3電腦。
Node.js 是一個基於Chrome JavaScript 執行時建立的一個平臺,是 讓JavaScript 執行在伺服器端的開發平臺,它讓JavaScript成為與PHP、Python、Perl、Ruby等伺服器端語言平起平坐的指令碼語言。
Node.js是一個事件驅動I/O伺服器端JavaScript環境,基於Google的V8引擎,V8引擎執行Javascript的速度非常快,效能非常好。
Node.js用於方便地搭建響應速度快、易於擴充套件的網路應用。
執行時是什麼?
所謂執行時,就是程式在執行期間需要依賴的一系列元件或者工具;把這些工具和元件打包在一起提供給程式設計師,程式設計師就能執行自己編寫的程式碼了。
對於 JavaScript 來說,它在執行期間需要依賴以下元件:
1) 直譯器
JavaScript 是一種指令碼語言,需要一邊解釋一邊執行,用到哪些原始碼就編譯哪些原始碼,整個過程由直譯器完成。沒有直譯器的話,JavaScript 只是一堆純文字檔案,不能被計算機識別。
2) 標準庫
我們在 JavaScript 程式碼中會呼叫一些內建函數,這些函數不是我們自己編寫的,而是標準庫自帶的。
3) 本地模組
所謂本地模組,就是已經被提前編譯好的模組,它們是二進位制檔案,和可執行檔案在內部結構上沒有什麼區別,只是不能單獨執行而已。這些本地模組其實就是動態連結庫(在 Windows 下是 .dll 檔案),如果你使用過C語言、C++ 等編譯型語言,那你應該能夠更好地理解它。
JavaScript 的很多功能都需要本地模組的支援,比如:
Cookie 用於儲存少量的使用者資料,它是使用者計算機上的一種小檔案,使用 Cookie 必須有檔案操作模組的支援。
Ajax 可以藉助網際網路從伺服器請求資料,這是一種網路操作,必須有網路庫的支援。
一步一步跟蹤程式碼的執行流程,從中發現邏輯錯誤,這個過程叫做偵錯,需要有偵錯程式(Debugger)的支援。
JavaScript 可以操作 HTML,這需要 HTML 解析模組提前構建起 DOM 樹。
本地模組一般封裝了通用功能,對效能要求較高,所以通常使用編譯型語言來實現,比如C語言、C++、組合語言等。
JavaScript 直譯器需要本地模組的支援,標準庫在編寫時也會呼叫本地模組的介面,而我們編寫的 JavaScript 程式碼一般不會直接使用本地模組,所以 Web 前端程式設計師觸及不到它們。
本地模組是幕後英雄,它不顯山露水,但是又不可或缺。
總結
直譯器、標準庫、本地模組等各種元件/工具共同支撐了 JavaScript 程式碼的執行,它們統稱為 JavaScript 執行時。
在 Node.js 之前,JavaScript 執行時被繫結在瀏覽器中,作為瀏覽器的各種模組出現。這意味著,要想執行 JavaScript 程式碼就必須啟動瀏覽器,JavaScript 逃不出瀏覽器的手掌心,它的功能受到很大的限制,只能作為網頁尾本使用。
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 的市場表現。
更多node相關知識,請存取:!
以上就是nodejs是哪個平臺的詳細內容,更多請關注TW511.COM其它相關文章!