我眼中的nodeJS

1、前言

  不知不覺node已經7歲了,我接觸node也有1年多了(從 0.10.36 版本到如今的 6.2.0);node已經逐漸穩定並被廣大開發者使用,伴隨着ES2015的規範,node的發展勢頭被一致看好!從各個方面看,JavaScript這門開發語言已經有了成爲跨平臺語言的趨勢:javascript

  • web端開發 jquery、angular、react等;
  • 後臺開發 node;
  • 遊戲開發 cocos2d-js;
  • 移動端開發 react native(性能介於webApp與native開發之間);
  • 桌面開發 nw.js(最近很火哦!);

  以前特別火的web全棧工程師mean(mongoDB+Express+Angular+Node)就是基於JavaScript的;隨着如今前端技術的快速發展、先後臺的徹底分離,前端的工做不只僅是切切圖寫寫靜態頁面了,如今的前端工做量仍是挺大的,前端技術的發展迭代遠遠超過個人想象,固然最合適的纔是最好的;扯遠了,接下來說講我眼裏的nodecss

2、優勢

  在接觸node以前,我寫過一段時間的java,接下來我就用java這門很是普遍的後臺語言與node做比較:html

  • node寫起來特別簡單、容易上手,開發靈活;
  • 開發效率高:高到什麼地步呢,幾行代碼就能完成一個http請求;
var app = require("express");
var router = app.Router();
router.get("/api",function(req,res) {
	res.json({
  	tag:"success",
      status:1,
      msg:"helloWorld"
    })
})
  • 處理高併發時有優點(事件驅動、非阻塞式 I/O 的模型):具體的能夠去搜索事件驅動與非阻塞的概念;
  • 簡單易上手,想寫好,比較難;不過如今都有模塊規範了,前端AMD、CMD,後臺的CommonJS;
  • node的生態圈很好,cnode社區也一直活躍一些大神哦;
  • 基本經常使用的依賴包npm上都有(穩定性不保證!);
  • node框架比較多,較流行的有express、koa一、koa二、hapi、meteor等(好像除了hapi,其餘都有中文社區);

3、缺點

  1. js寫法太靈活(帶點面向對象,帶點函數式編程),10我的的代碼,可能就出現10種代碼風格(誇張了點),便是優勢也是缺點;
  2. js的callback問題,剛接觸的時候真的很蛋疼,動不動就不知道從哪callback了;
  3. js是弱類型語言,只有在解釋器裏運行的時候才能知道這個變量的類型;在編程過程時,是沒法判斷該變量是否有錯;錯誤的聲明變量可能會形成一些特別奇怪的報錯(下面會說解決方案);
  4. js沒有特別好的模塊規範,雖然已有前端AMD、CMD,後臺的CommonJS規範;若是想做爲一個web端的全棧工程師,須要瞭解先後端的各類規範,有一種解決方案UMD(同時兼容AMD,CommonJS規範);
  5. js做爲單線程語言,若是線程遇到大量計算佔用CPU,也會形成阻塞,請求都會掛起,響應超時,甚至宕機;
  6. 編寫邏輯複雜業務邏輯代碼時,若是不使用一些MVC之類的設計模式時,代碼是又臭又長,不可複用,維護性也差;

4、解決方案

  1. 針對代碼維護、擴展這方面,須有一套符合實際的編碼規範,並運用一些成熟的設計模式、設計思想;
  2. 針對callback這種問題,已經有很好的解決方案了,例如async,bluebird 這些第三方控制流程包,並且已經歸爲es6標準了,es7中async、await的特性也能很好的解決此問題;
  3. js做爲弱類型語言,在解釋過程的時候才能判斷是否出錯,開發的須要細心點,webstorm是能夠打斷點的,借用typescript在編碼過程的時候也是能夠提示錯誤的;
  4. 在js設計之初就保留了class,import等關鍵字,在es6裏終於能用了,js慢慢從一個腳本語言變成高大上的語言了;
  5. 相對於多線程而言,單線程能減小上下文的性能開銷,其實js也是能夠開多個線程的,一個主線程,多個子線程(工做線程),參考cluster庫;
  6. 當業務特別複雜、繁瑣的時候,其實能夠嘗試一下typescript(微軟的東東,我看了一下介紹,以爲很是不錯),typeScript能夠編譯出純淨、 簡潔的javaScript代碼,而且能夠運行在任何瀏覽器上、Node.js環境中和任何支持ECMAScript 3(或更高版本)的JavaScript引擎中;或者從架構來講,用java補,如今也有成熟的解決方案了;

5、我的總結

  • 雖然nodejs終究是js,可是前端(包括dom、bom)跟後端終究乾的事情不同,感受node寫後臺慢慢的能像java同樣處理複雜邏輯以及大型項目;所謂的web全棧工程師,聽起來高大上,這要把html五、css三、js、database、linux等都要吃透,很難~!
  • 做爲一名技術宅來講,js這門語言目前很是流行而且會持續火下去,連vsCode都是js寫的,基本上其餘語言能作的,js都能作;
  • 做爲一名nodejs的推崇者與實踐者,我仍是太年輕,最近在作微服務架構方面的東西,慢慢折騰;
  • 以上都是我的觀點僅供參考,若有不足,盡情提出,很是感謝!!
相關文章
相關標籤/搜索