1.誕生:javascript
Ryan Dahl 2009年3月宣佈建立基於v8的輕量級庫,5月發佈第一版java
最初基於linux系統,2011年7月發佈windows版本node
2012年交給IsaacZ.Schlueter(npm包管理者和做者)linux
2.爲什麼選擇javascript:web
設計高性能web服務器的要點:事件驅動、非阻塞I/Onpm
事件驅動:javascript作兩件事:操做DOM和操做BOM,何時幹?須要乾的時候幹。何時須要幹?事件被觸發的時候。即在事件被觸發以前,全部的結構被靜態的呈現出來,在事件觸發以後,動態的行爲發生,從新產生新的靜態結構,事件與狀態構成了事件驅動開發的基本要素。編程
非阻塞I/O:js單線程,經過回掉函數達到非阻塞的目的,非阻塞就是程序會一直按順序執行,直到全部代碼執行完畢,當遇到須要等待即異步函數的時候,直接跳過,等同步隊列執行完,再來執行。windows
3.爲何叫node:後端
開始起名爲web.js,單純做爲web服務器使用,隨着發展,構建了服務器,客戶端,命令行工具等,發展爲一個強制不共享任何資源的單線程、單進程的系統,爲構建大型分佈式應用提供基礎設施,目標是構建快速的可伸縮的網絡應用平臺。經過通訊協議構建許多node,每一個node進程都是構建這個網絡應用的一個節點。瀏覽器
4.對javascript的意義:
Node與瀏覽器對比
Node與瀏覽器運行機理相同,是瀏覽器在協議棧另外一邊的倒影。Node打破了javascript只能在瀏覽器中運行的局面,先後端環境統一,下降了先後端轉換的代價。
5.特色:
異步的I/O;同步io任務耗時是全部任務耗時之和,異步優點顯而易見。
事件與回掉函數;事件編程輕量級,鬆耦合,只關注事物點。
單線程;不須要向多線程那樣在乎狀態同步問題,不會有死鎖存在
缺點:沒法利用多核cpu,錯誤引發整個應用退出,
大量計算調用cpu會致使沒法異步調用io(child_process)
跨平臺:基於libuv實現跨平臺