nodejs與go語言比較如何,它們的發展前景怎樣,網站後台開發,選擇nodejs好還是go好?


正好很應景,可以看看這篇文章:Farewell Node.js

作者 TJ Holowaychuck 是 Node 界最高產的開發者之一,最近轉投 go 了。當然,原因是他現在更多地開始搞分散式系統了,如果做網站他還是會選擇 Node。

從大型工程的角度來說,go 是完爆 Node 的。性能,內存開銷,靜態類型,對非同步的處理,異常的處理,可調試性,系統穩定度,工具鏈的成熟度,等等,都是 go 佔優。但是 Node 在依賴處理方面更好,npm 對依賴版本的管理 (go 的依賴不能指定版本,還需要藉助非官方的工具)非常優秀,另外 Node 社區的活躍度要比 go 好,如果你想要快速做一個東西,npm 上各種現成的包可以用。

Node 在做網站這方面,尤其是需要直接面向用戶的 http 伺服器這方面,有一個天然的優勢,那就是前後端的語言統一。一方面可以減少切換語言的腦力成本,提高開發者的效率,另一方面可以實現前後端共享模板,從而實現首屏伺服器渲染,局部更新瀏覽器渲染的架構,提高首屏的載入速度。

如果你做的網站後台就是個簡單的 CRUD 應用,或者是做產品原型,或者你同時還想兼顧前端,Node 會是更好的選擇;但如果你的後台很複雜,需要區分各種服務,搞數據分析,分散式集群等等,那絕對是選 go。

最後,其實兩者結合起來用也是完全可以的,把 Node 作為面向用戶的大前端的一部分,專門負責頁面的生成,後端用 go 或者其他語言實現,前後端之間通過規範的數據介面通信。關於這樣的解決方案,參見 怎麼評價淘寶 UED 的 Midway Framework 前後端分離?


看社區


@陳厚來 呵呵,Go的底層模型比libuv牛太多了。


一個是限制較多的世界,一個是限制較少的世界。限制少的,自然就更依賴你的獨立思考和求證能力;而限制多的,則可以少犯錯誤少動腦子。接受什麼樣的權利和義務的平衡點,每個人都不一樣。


對node而言~~~基本上就是,「性能做得好,不如廣告做得好」


就發展前景來說,目前我覺得 node 的勢頭比 go 要好。

就網站後台的開發來說,用 node 更快,學習資料也更多。網站後台不是個適合 go 的場景。

你可以看看 node 的 express 框架,跟 go 的 web 框架之間的 helloworld 對比。node 的簡單很多,而且 npm 上面的模塊優勢目前看不出 go 可以追的上。


看了 Farewell Node.js 這篇文章,作者主要抱怨Node的問題如下

  • ou may get duplicate callbacks
  • you may not get a callback at all (lost in limbo)
  • you may get out-of-band errors
  • emitters may get multiple 「error」 events
  • missing 「error」 events sends everything to hell
  • often unsure what requires 「error」 handlers
  • 「error」 handlers are very verbose
  • callbacks suck

所有這些問題歸納為一點 — callback hell,這點確實是node之前最大的問題。但是隨著Javascript ES6標準的出現,node的這個問題已經被很好地解決,現在都用promise和generator替代了callback模式,非同步代碼寫起來和同步代碼一樣

callback模式

doAsync1(function () {

doAsync2(function () {

doAsync3(function () {

})

})

})

sucks!

Promise generator模式

yield doAsync1();

yield doAsync2();

yield doAsync3();

相信node的未來會更好。


隨著年齡的增長,我開始喜歡生成能力強的框架了,因為比較有生產力,不用重複造輪子。

無論什麼語言,什麼框架,只要適合,有生產力,那麼就適合我們


go可以交叉編譯--------JS不需要編譯,但C/C++ 擴展的管理方式是gyp,依賴python和平台相關的C++編譯器。

go編譯了打包丟上去伺服器就能玩起來,而nodejs你需要npm,然後等loaddep,大個便回來結果遇到一個需要node-gyp編譯的東西拋出一個npm Err! 繼續npm install loaddep~~~

前端門,學一門語言不難,一個語言不可能什麼場景都合適,待他看似能做到的時候,JS已經不再是JS了。


真的要選還是golang吧,解決方法比較多,後期的擴展方便。問題也是版本有點跳,已經上線的功能真不曉得跟不跟,看團隊的人更熟悉那個,就用那個。Nodejs還不太適合做企業後台,雖說跟別人說的時候很溜,但這沒什麼卵用。


如果團隊水平參差不齊的話,建議使用golang

如果團隊對於非同步流程式控制制很熟悉的話,並且也喜歡JS的話建議可以express之類的Node庫。

另外,如果技術選型,還要從維護成本來看,非同步調用的代碼需要在設計之初考慮好,否則更改一個回調可能影響到多個。比如以刪除粉絲為列,首先你要查找這個粉絲是否存在,然後等待回調,在這個裡面你又要查找兩者的關係,然後又是一個回調,在之後你又要去看是否能刪除 ,最後在刪除 後做動作,,,,,一個又一個回調。


go在中國比在國外還流行呢


適合最好,沒有絕對,fibjs也可以考慮呀


撇開技術角度考慮,從經濟學方向延展一下,對單個人或者小團隊來說,Golang或者Node.JS都很高效。當項目需求從幾個單點向外擴張時,需要擴張研發團隊時,就會發現Java、PHP的人才太好招了。Golang和NodeJS都只能招進來培養,對於小團隊的研發成本就太高了些。就從招人來看,NodeJS還是比Golang好招聘些


在選則之前還是看看自己的團隊規模和工程師水平吧。能Cover住才是關鍵。本人12年開始一直用node.js,以前做外包,現在創業做自己產品,一直用node沒發現什麼性能問題,有什麼問題也都可以輕鬆解決了。對於小Team和外包團隊,沒那麼多牛人,需要一兩個人能搞定全棧Web,App,Service,DB,而且讓團隊中的其他人也可以具備這種能力,我認為node是唯一的選擇,go是不可能做到的。說node有問題可以把問題列出來看看是問題嗎,node了這麼多年發現只有統計分析這種強計算的用node不合適,但是也很好解決,種子垂直類的服務太多了,何必自己開發。如果非一定自己搞從架構層面解決就好了,java或python不一下就OK啦。


推薦閱讀:

選擇學習 C 語言、Go 語言、C++11 各有哪些優缺點?
golang中怎麼處理socket長連接?

TAG:JavaScript | Nodejs | 網站後台 | Go語言 | 後台開發 |