1. 程式人生 > >Node.js基礎item1—Node.js概念

Node.js基礎item1—Node.js概念

簡單來說Nodejs就是執行在伺服器端的JavaScript。

什麼是NodeJS?

javascript是一門指令碼語言(可以用來程式設計的並且直接執行原始碼的語言,就是指令碼語言),指令碼語言都需要一個解析器才能執行。對於寫到html中的js,通常是由瀏覽器去解析執行。對於獨立執行的js程式碼,則需要nodeJS這個解析器解析執行。

每一種解析器都是一個執行環境,不但允許JS定義各種資料結構,進行各種計算,還允許JS使用執行環境提供的內建物件和方法做一些事情。例如執行在瀏覽器中的JS的用途是操作DOM,瀏覽器就提供了document之類的內建物件。而執行在NodeJS中的JS的用途是操作磁碟檔案或搭建HTTP伺服器,NodeJS就相應提供了fs、http等內建物件。

Node.js是一個Javascript執行環境(runtime)。實際上它是對Google V8引擎進行了封裝。V8引 擎執行Javascript的速度非常快,效能非常好。Node.js對一些特殊用例進行了優化,提供了替代的API,使得V8在非瀏覽器環境下執行得更好。

Node.JS是一個讓開發者可以快速建立網路應用的伺服器端JavaScript平臺,同時運用JavaScript進行前端與後端程式設計,開發者可以更專注於系統的設計以及保持其一致性。

NodeJS特性

以下是一些使得Node.js成為軟體架構師的首選的重要特徵。

  • Node.js庫非同步和事件驅動 - 所有API非同步是非阻塞。 這意味著一個基於Node.js的伺服器不會等待API返回資料。 伺服器移動到下一個API後呼叫它,Node.js事件的一個通知機制有助於伺服器,以獲得從以API呼叫的響應。

  • 非常快 - 正在構建在谷歌Chrome的V8 JavaScript引擎,Node.js庫程式碼執行是非常快的。

  • 單執行緒但高度可擴充套件 - Node.js使用事件迴圈單執行緒模型。事件機制有助於伺服器在非阻塞的方式作出反應,並使得伺服器的高可擴充套件性,而不是它建立執行緒限制來處理請求的傳統伺服器。 Node.js使用單執行緒的程式和同樣的程式處理比傳統的伺服器要大的多,比如:比Apache HTTP伺服器請求服務的數量大得多。

  • 無緩衝 - Node.js的應用從來沒有緩衝任何資料。這些應用程式只需輸出塊中的資料

統一在Javascript瀏覽器之外的實現, CommonJS

早在Netscape誕生不久後,JavaScript就一直在探索本地程式設計的路。無奈那時服務端JavaScript走的路均是參考眾多伺服器端語言來實現的,在這樣的背景之下,一沒有特色,二沒有實用價值。但是隨著JavaScript在前端的應用越來越廣泛,以及服務端JavaScript的推動,JavaScript現有的規範十分薄弱,不利於JavaScript大規模的應用。那些以JavaScript為宿主語言的環境中,只有本身的基礎原生物件和型別,更多的物件和API都取決於宿主的提供,所以,我們可以看到JavaScript缺少這些功能:

  • JavaScript沒有模組系統。沒有原生的支援密閉作用域或依賴管理。
  • JavaScript沒有標準庫。除了一些核心庫外,沒有檔案系統的API,沒有IO流API等。
  • JavaScript沒有標準介面。沒有如Web Server或者資料庫的統一介面。
  • JavaScript沒有包管理系統。不能自動載入和安裝依賴。
    於是便有了CommonJS(http://www.commonjs.org)規範的出現,其目標是為了構建JavaScript在包括Web伺服器,桌面,命令列工具,及瀏覽器方面的生態系統。

CommonJS試圖定義一套普通應用程式使用的API,從而填補Javascript標準庫過於簡單的不足。CommonJS的終極目標是制定一個像C++標準庫一樣的規範,使得基於CommonJS API的應用程式可以在不同的環境下執行,就像用C++編寫的應用程式可以使用不同的編譯器和執行時函式庫一樣。

CommonJS規範: 模組,包,系統,二進位制,控制檯,編碼,檔案系統,套接字,單元測試等。

NodeJS是CommonJS規範最熱門的一個實現。
CommonJS制定瞭解決這些問題的一些規範,而Node.js就是這些規範的一種實現。Node.js自身實現了require方法作為其引入模組的方法,同時NPM也基於CommonJS定義的包規範,實現了依賴管理和模組自動安裝等功能。

常用框架

  • express:完善、出現早、文件全、社群大
  • koa:超前,完善中
  • hapi:複雜,適合大型專案