標籤:
Node.js 是一個基於 Chrome JavaScript 運?時建立的平台, 用於方便地搭建響應速度快、易於擴充的?絡應?。Node.js 使用事件驅動, 非阻塞 I/O 模型而得以輕量和?效,?常適合在分布式裝置上啟動並執行資料密集型的即時應用。V8 引擎執行 Javascript 的速度非常快,效能非常好。Node 是一個 Javascript 運行環境(runtime)。 實際上它是對 Google V8 引擎進行了封裝。 Node 對一些特殊用例進行了最佳化, 提供了替代的 API,使得 V8 在非瀏覽器環境下運行得更好。
nodejs是一個基於Chrome V8 引擎的JS運行環境,也就是讓javascript運行在伺服器(server)端,
NodeJS使用了一個事件驅動,非阻塞式的I/O模型,使得其輕量又高效。
Nodejs包管理器npm是全球最大的開源生態系統。
nodejs是服務端的js平台。
npm grunt express 等強大的代碼與專案管理應用在nodeJS上。
關於NodeJS與傳統伺服器處理平台(Apache)的區別
Apache的多線程高併發模式
Apache是一種多執行緒並發,但是在一些大型的web應用上也會發生阻塞。
線程和進程
線程是可以獨立啟動並執行最小的CPU單位。
線程可以在同一個進程中並發運行,並共用該進程下的記憶體位址空間。
進程可以支援多個線程,它們看似同時執行,但是相互之間並不同步。
一個進程中的多個線程共用相同的記憶體位址空間,意味著可以訪問相同的變數和對象,並且從同一堆中指派至。
這樣讓線程之間共用資訊變得容易,但是也要確保他們不會妨礙同一進程中想的其他線程。
NodeJS的非同步I/O原理
用資料庫的調用舉例:
Apache,執行到第一個線程的時候會等待query返回結果,一方面會導致線程長期阻塞等待,另一方面會為了新請求不斷增加線程,會浪費大量的資源,同時線程增加會佔用大量的CPU時間來處理記憶體環境切換。
NodeJS是非同步單線程的,應用的是非同步回調的方法,也就是非同步I/O。
解釋:當進程執行的時候,不會等待結果的返回,而是直接執行下面的語句,直到進入事件迴圈,當資料庫執行返回結果的時候會將事件發送到事件隊列,等線程進入事件迴圈之後才會調用之前的回呼函數。
也就是nodejs的工作原理其實就是事件迴圈。每一條nodejs的邏輯都是寫在回呼函數裡面的,而回呼函數都是返回之後才非同步執行的。
NodeJS也會發生阻塞,但是阻塞發生在自己的單個線程當中,不是發生在後續回調的流程當中。
與php區別
用node來做網站開應用的是分塊載入的模式,不用像php那樣把所有的資料一次性載入到用戶端。
NodeJS相比於php和Apache開的新線程來講,節省了CPU記憶體和環境切換的時間。
NodeJS的應用情境
NodeJs適合應用在具有大量的細小的http請求環境下,例如web的即時聊天程式,或者上萬人同時線上的遊戲伺服器。不用考慮http請求次數過多的問題。
以上是我對node.js一些初步瞭解,希望這些可以讓更多的朋友瞭解node.js。
node.js的初步見解