搞懂什么是Node.js原來(lái)這么簡(jiǎn)單
在 Node.js 的官方網(wǎng)站的首頁(yè)中,有這樣一句話來(lái)描述 Node.js:
Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient.
翻譯過(guò)來(lái)的意思就是:
Node.js 是基于 Chrome 的 V8 JavaScript 引擎的 JavaScript 運(yùn)行時(shí)。Node.js 采用事件驅(qū)動(dòng)、非堵塞 I/O 模型,使其輕量化和高效。
上面這句話的第一句說(shuō)明了什么是 Node.js,第二句說(shuō)明了 Node.js 的特點(diǎn)。
想要搞懂官方這句話的具體含義,我們還要從 JavaScript 語(yǔ)言說(shuō)起。
Node.js 的核心開(kāi)發(fā)語(yǔ)言這里假設(shè)你已經(jīng)掌握了 JavaScript 語(yǔ)言的基礎(chǔ)語(yǔ)法以及基本使用。如果還沒(méi)有掌握 JavaScript 的話,還是先去入門一下 JavaScript 語(yǔ)言吧。
掌握了 JavaScript 語(yǔ)言的應(yīng)該知道,JavaScript 語(yǔ)言是作為瀏覽器的腳本語(yǔ)言,可以實(shí)現(xiàn)網(wǎng)頁(yè)與用戶之間的交互。
什么是交互?比如用戶在網(wǎng)頁(yè)中輸入用戶名或密碼,這種用戶輸入行為就可以叫做交互。或者用戶點(diǎn)擊網(wǎng)頁(yè)中的按鈕等等,都可以叫做交互。
JavaScript 語(yǔ)言之所以可以實(shí)現(xiàn)網(wǎng)頁(yè)與用戶之間的交互,主要是依靠事件來(lái)完成的。比如,用戶的輸入事件、點(diǎn)擊按鈕事件等等。
下面我們通過(guò)用戶點(diǎn)擊按鈕的行為為例,來(lái)看看 JavaScript 語(yǔ)言是如何處理的。
通過(guò)上面的分析圖,我們可以清晰的看到:
用戶點(diǎn)擊網(wǎng)頁(yè)的按鈕,執(zhí)行 JavaScript 邏輯。 JavaScript 邏輯經(jīng)歷三個(gè)階段,分別是捕獲事件、觸發(fā)事件和事件冒泡。 當(dāng) JavaScript 邏輯執(zhí)行完畢后,會(huì)將結(jié)果返回網(wǎng)頁(yè)。 網(wǎng)頁(yè)再根據(jù)結(jié)果顯示給用戶。通過(guò)這樣的一個(gè)小案例,我們可以知道 JavaScript 語(yǔ)言處理網(wǎng)頁(yè)與用戶之間的交互,主要是依靠事件驅(qū)動(dòng)。
網(wǎng)頁(yè)與 Node.js 中 JavaScript 的區(qū)別目前幾乎所有的瀏覽器都支持 JavaScript 語(yǔ)言,之所以支持的原因在于瀏覽器中都集成了 JavaScript 引擎。
在眾多瀏覽器中,Chrome 瀏覽器的性能相對(duì)更好,而且 Chrome 瀏覽器集成的 V8 JavaScript 引擎還是開(kāi)源的。
而 Node.js 就是利用了 Chrome 瀏覽器的開(kāi)源 V8 JavaScript 引擎。那在網(wǎng)頁(yè)中使用 JavaScript 語(yǔ)言和在 Node.js 中使用 JavaScript 語(yǔ)言有什么不同呢?我們可以通過(guò)下面這張圖來(lái)了解一下。
通過(guò)上圖可以清晰地看到,Node.js 相對(duì)于瀏覽器 Node.js 沒(méi)有提供 WebKit 內(nèi)核和 HTML 相關(guān)的 UI 技術(shù)。也就是說(shuō),Node.js 只提供了 JavaScript 語(yǔ)言。
為什么要這樣呢?其實(shí),Node.js 的作者最初的想法就是想設(shè)計(jì)一個(gè)輕量和高效的服務(wù)器。
什么是服務(wù)器那服務(wù)器又是什么呢?如果把一個(gè) WEB 應(yīng)用比作是一個(gè)人的話,那服務(wù)器就是人的大腦。
通過(guò)上面的圖我們可以知道,人與人交流時(shí),基本上要通過(guò)以下幾個(gè)步驟:
別人與我交流,我是通過(guò)人的感官進(jìn)行接收。 感官將信息傳遞給大腦。 大腦接收到信息后,進(jìn)行處理,將處理的結(jié)果返回。 再通過(guò)感官反饋給與我交流的人。通過(guò)這個(gè)過(guò)程,我們可以發(fā)現(xiàn),別人是直接通過(guò)感官與我交流的,并不知道大腦是如何工作的,也并不關(guān)心大腦是如何工作的。
而 WEB 應(yīng)用與人類似,用戶是與網(wǎng)頁(yè)進(jìn)行交互,網(wǎng)頁(yè)將信息傳遞給服務(wù)器,服務(wù)器接收、處理并響應(yīng),最后網(wǎng)頁(yè)將結(jié)果顯示給用戶。
作為用戶來(lái)說(shuō),并不關(guān)心服務(wù)器是如何工作的,甚至用戶都感覺(jué)不到服務(wù)器的存在。但是,作為開(kāi)發(fā)人員,想要開(kāi)發(fā)一個(gè)完整的 WEB 應(yīng)用,服務(wù)器的邏輯核心。
從現(xiàn)在開(kāi)始,我們要從用戶思維轉(zhuǎn)變成開(kāi)發(fā)思維。通過(guò)開(kāi)發(fā)思維重新審視我們?cè)?jīng)使用過(guò)的 WEB 應(yīng)用,你會(huì)發(fā)現(xiàn)有所不同。
思維的轉(zhuǎn)變是很重要的!很重要的!很重要的!重要的事兒說(shuō)三遍。
Node.js 的簡(jiǎn)單理解講到這里,我們可以簡(jiǎn)單地來(lái)歸納一下 Node.js 到底是什么了。
Node.js 就是基于 Chrome 瀏覽器的 V8 JavaScript 引擎,以 JavaScript 語(yǔ)言為核心開(kāi)發(fā)語(yǔ)言的服務(wù)器技術(shù)。
如果使用 Node.js 開(kāi)發(fā)一個(gè) WEB 應(yīng)用應(yīng)該是怎么樣的呢?
由于 JavaScript 邏輯是依靠事件驅(qū)動(dòng)的,所以就不難理解 Node.js 是事件驅(qū)動(dòng)的了。
想要更好地理解和掌握 Node.js,還是先回去惡補(bǔ)一下 JavaScript 語(yǔ)言中的事件處理那些內(nèi)容吧!
Node.js 除了是基于 Chrome 瀏覽器的 V8 引擎以外,還提供了一系列的模塊,讓我們可以方便地實(shí)現(xiàn)一些功能。比如,處理客戶端的請(qǐng)求、文件的處理等操作。
我們學(xué)習(xí) Node.js,主要就是學(xué)習(xí) Node.js 所提供的模塊內(nèi)容。
以上就是搞懂什么是Node.js原來(lái)這么簡(jiǎn)單的詳細(xì)內(nèi)容,更多關(guān)于Node.js的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. Java基于redis和mysql實(shí)現(xiàn)簡(jiǎn)單的秒殺(附demo)2. php讀取xml中某個(gè)元素的內(nèi)容(PHP5以上才支持)3. IntelliJ IDEA設(shè)置編碼格式的方法4. 如何用python識(shí)別滑塊驗(yàn)證碼中的缺口5. SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)6. IDEA SpringBoot 項(xiàng)目配置Swagger2的詳細(xì)教程7. Kotlin + Flow 實(shí)現(xiàn)Android 應(yīng)用初始化任務(wù)啟動(dòng)庫(kù)8. Docker究竟是什么 為什么這么流行 它的優(yōu)點(diǎn)和缺陷有哪些?9. ASP.NET MVC視圖頁(yè)使用jQuery傳遞異步數(shù)據(jù)的幾種方式詳解10. AJAX實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)效果
