關於NodeJS的思考

  對於NodeJS來講傳統程序員比較陌生,初看覺得是什麼前端框架,其實並非前端框架。傳統的Javascript只能跑在瀏覽器中,可是一位叫Ryan Dahl的開發者靈感一來,爲何Javascript不能運行在服務端呢?而後通過思考後他決定將Javascript帶到後端,在苦苦尋覓中發現谷歌的V8引擎來運行Javascript是很高效的,可是僅僅有瀏覽器端Javascript是不能構建出強大後端應用的,因此他移除了沒必要要的瀏覽器端的特徵後又爲Javascript添加入了更強大的API,這個API就是後來推薦的CommonJS標準。CommonJS包含操做IO、DataBase、OS相關API(圖1-2;摘自《Node.js 開發指南》)。  前端

 

  Ryan Dahl思考如今的IT系統經常遇到C10K問題,爲何會出現這個問題呢?是由於傳統的後端業務經常以線程爲單位進行執行的,而線程大量建立會致使系統資源不足,以及在IO操做時CPU的閒置引起的開銷。Ryan Dahl發現JS的異步-回調模式很好的解決IO操做的致使CPU閒置開銷問題,當在執行IO操做時CPU能夠繼續執行其餘業務,IO操做完成後回調繼續由CPU接着執行。從而保證CPU的資源不浪費(圖1-1;摘自《Node.js 開發指南》)。  程序員


         

 

  Ryan Dahl所設計的NodeJS是一個單線程異步IO模型執行機制的服務端程序。IO操做將會交給專用的工做線程處理,回調的方法將插入主線程隊列,由於NodeJS是單線程模型,面向CPU操做的業務都會排隊在主線程中執行。這也偏偏是NodeJS的弱點,若是CPU操做的業務時間太長,將會影響其餘業務,不過還好目前已經有解決方法了,例如:「threads-a-gogo」模塊。NodeJS不知道爲何沒法使用TryCatch捕獲回調內部異常,這問題將致使程序調試時的複雜性,同時會引起整個崩潰重啓,不過目前第三方已經實現捕捉內部異常,例如:「domain」模塊,但仍是沒法避免崩潰重啓。NodeJS的中可能出現過多的回調函數也是一個頭痛的問題,這樣會致使代碼的可維護性降低,不過目前「Promise」模塊已經基本解決嵌套帶來的閱讀問題,「Promise」經過一套巧妙的回調接口可以平行性進行接連操做,防範過多的嵌套問題,而「Promise」的思想也開始影響AJAX相關的前端庫。Ryan Dahl在設計NodeJS引入NPM方便社區協做,使得NodeJS的功能的迭代速度進一步加快。同時NodeJS自身集成了Server方便敏捷開發和部署。NodeJS還能夠作其餘軟件,不只侷限於Web端(圖3-1;摘自《Node.js 開發指南》)。 後端

 

  雖然NodeJS目前優勢明顯,缺點也明顯,可是他偏偏有PHP沒法比擬的優點。尤爲是在高併發IO類業務時體現的淋淋盡致。若是NodeJS能解決單線程與異常捕捉與異步業務的開發的門檻和維護複雜度等問題。相信不久未來會是替代PHP的最佳良品。  瀏覽器

  以上截止僅供發文時總結,隨着NodeJs版本快速迭代會有很大變化。前端框架

相關文章
相關標籤/搜索