nodejs學習文檔(一) 認識node.js

Node.js 主要應用領域

RESTFul API

api是當前web應用最多見的請求方式,尤爲是如angularjs、react等框架實現的單頁面應用,請求離不開GET,POST,HEAD,UPDATE,DELETE,PUT,CONNECT等api。
Node.jsjavascript

實時通訊

如 消息推送php

高併發

node在最簡單的狀況下,使用單線程就能夠承載大量的請求,若是使用多進程,相對於其餘解決方案的話,則具有了更大的優點。(是的,node能夠玩多進程)java

I/O 線程

涉及到網絡、文件、系統等操做會阻塞I/O線程,若是使用node,則能夠協調IO操做。node

生態圈

以NPM爲中心

npm.js 熱度有多高就不講了。react

基礎服務提供商的支持

各大編譯器開發商的支持就不說了,node的發展也推進了js的發展,如衍生的各種測試框架。git

IO.js

目標: 兼容性、性能
社區: 新功能,新目標
現狀: github上看看它的排名

node與js的關係

js

JavaScript = ECMAScript(包含標準的語法和基本對象) + DOM(文檔基本模型,描述處理網頁內容的方法和結構) + BOM(瀏覽器對象模型,描述與瀏覽器交互的方法和結構)
08年 google發佈了google chrome(谷歌瀏覽器),同時發佈了V8引擎
後續先出世了各種DOM操做庫(jQueryExtJS/YUI等)
再日後基於數據和顯示的隔離思想(MV分離), 出世了各種框架,就不講了。angularjs

Node爲什麼選擇了JavaScript

1 08年V8的出現
2 js是單線程語言,天生事件驅動,支持異步
3 js當時不支持服務器,沒有歷史包袱
4 開發門檻低,比pytion和php低…github

fibjs

當時fibjs支持了js,可是它使用同步的方式實現的非阻塞,這句話可能很難理解,後續講到線程的時候,會再做解釋。web

nodejs的特色和缺點

部署簡單方便

環境配置簡單,只需安裝nodejs便可
注重約定(便於統一和拓展)
項目所須要擴展、插件、資源相對獨立,不易衝突(package裏有聲明啊,模塊化嘛)chrome

異步編程

同步: —— - - -
異步: ——
-
-
-
異步的實現方式:
1 回調函數
2 事件監聽
3 訂閱/發佈(其實思想上相似事件監聽)

高效與性能

單個操做的性能並非node的強項
經過優化資源調配和I/O操做來實現高效
對比一下:
PHP : 在執行I/O時原地等待,開多進程,浪費資源,而且要考慮多進程之間的數據資源共享
C++ : 利用多線程,程序要本身維護線程和資源的狀態

單線程—多進程

爲了更好的利用CPU資源,能夠利用子進程和多進程:
子進程: child_process ,與主進程通訊比較方便
多進程: 一開始能夠同時開多個node進程,但資源佔用和進程間的通訊問題不太好解決——依賴pm2等庫及緩存處理 ,當前的node版本,能夠直接玩多進程,後續會講。

缺點

大量採用匿名函數,拋出的異常不易閱讀 當時的try/catch限於同步代碼,使得異常捕獲較爲複雜,異步用參數標記處理。 單線程::可靠性差,一旦發生錯誤未被捕獲,阻塞掉進程就涼涼了 不適合CPU密集型的場景:好比視頻處理,純粹的運算等,這種狀況最好編寫node的C語言擴展。 回調的代碼習慣影響可讀性: 當時只能經過良好的代碼風格處理。

相關文章
相關標籤/搜索