標籤:

Node.js 發展前景如何?適用於哪些場景?


看好在長鏈接推送這塊的應用。

1. 與python實現的若干web server庫(比如tornado)相比,它是從底層到庫上都是完全非同步:一切都是事件回調處理,IO讀取,DB庫,都是非同步的,而python由於很多庫只支持阻塞操作,不得不使用線程池方式來減少阻塞帶來的吞吐量下降。其實Java也有這樣的問題,即使使用NIO網路框架,到了memcached/mysql之類的客戶端調用,也只能阻塞當前線程,不得不使用線程池來處理網路事件。

2.計算性能。作為動態語言,由於v8的加持,比起python要好一些。但是由於有v8 最大1G堆大小的限制,相比java/c++等語言,在高負載下不夠給力。

3.客戶端到伺服器,都是使用js開發,適合前端的同學來實現一些後台監控應用。加上js的高生產力和靈活性,一些簡單的需求不需要動用c++之類的核武器。

4.海量長鏈接推送。Plurk這個網站曾使用nodejs替換掉python/c/java做的comet伺服器,但是由於低版本的一些問題(不支持多進程,在高負載下表現不佳),最後還是切換回去java的實現。詳細請閱讀http://amix.dk/blog/post/19577#Is-node-js-best-for-Comet 一文。 syncpad這個應用也使用了nodejs做comet伺服器,並且與Erlang的實現做了比較(http://blog.mysyncpad.com/post/2073441622/node-js-vs-erlang-syncpads-experience http://blog.mysyncpad.com/post/2143658273/syncpad-node-js-server-revisited ),Erlang的實現還是要強悍不少,只是這語言太曲高和寡了,mochiweb這個伺服器做長鏈接推送其實很給力的!


@梁曉峰 的答案 1,2 條就是最好的答案了,總結一下:IO 密集而非計算密集的情景;高並發微數據(比如賬號系統)的情景。特別是高並發,Node.js 的性能隨並發數量的提高而衰減的現象相比其他 server 都有很明顯的優勢。


個人觀點持悲觀態度:僅限於在聊天等特殊場景小規模使用。

理由很簡單,目前都是前端的同學在使用。而IT領域,尤其是稍有規模或者複雜度的後端程序,都是前端工程師無法駕馭的。

後台工程師一般都不太願意碰JavaScript. 他們的工具箱中有非常優秀的Perl,Python,Ruby的動態語言,也有C,C++,Java等編譯型語言。並且這些語言的社區及三方庫歷史悠久、久經考驗,並依舊保持非常好的活力。

所以在一般的大公司,前端工程師以幫忙為出發點,自己負責一些後台的開發,但如果真是要逆天頂替後台工程師,那就是天方夜譚了。

即使是在創業公司,一人多職的情況下,也不太會讓NodeJs發揮太大的作用。這種基於Callback的非同步框架,雖然性能極優,語法極簡,但稍有不慎,很容易觸碰性能陷阱。編程語言還是要往簡單、穩健的方向走。另外Ruby/Python,甚至新起的Go語言都比NodeJS太全面了。

最後,結合最近兩年的一些工作經歷,個人不太贊成對某個語言過份推崇的現象。優秀的工程師應該根據自身情況選擇合適的工具,在工具選擇這件事兒上,沒有必要去說服他人,也沒有必要跟隨他人。


今天看了一篇文章:Node.js Convincing The Boss Guide 作者是node.js內核早期貢獻者。摘了一些目錄如下:

Bad Use Cases

  • CPU heavy apps

  • Simple CRUD / HTML apps

  • NoSQL + Node.js + Buzzword Bullshit

Good Use Cases

  • JSON APIs

  • Single page apps

  • Shelling out to unix tools

  • Streaming data

  • Soft Realtime Applications


後端的前台nodejs已經是王了


——The Best Language——

JavaScript是程序語言的黑天鵝。

沒有人能預料到,這個設計上並不算優秀的語言,竟然成了最好的語言。

——Why JavaScript——

JavaScrip本身易學、免編譯、瀏覽器支持,使得它成為受眾最廣的語言。

NodeJs使得JavaScript可以到處運行。隨著類庫越來越多,JavaScript的開發成本會遠低於其他語言。特別是創業公司,在極少人力的情況下,使用JavaScript做技術棧是最合理的選擇。

商業上的需要進而會推動社區的繁榮,社區會產生更多的類庫。

——The Best Solution——

網頁:Express

從流行程度來看,Express是NodeJs的Web框架無可爭議的王者。

信息來源:Companies using Express

APP:Device One

有很多備選方案比如:React Native、Weex、HBuilder。

但從技術方案上,我更喜歡Device One。用JS轉原生,而不是包裝WebView來模擬原生。

不過它是國內小廠,知名度不高。到目前為止,只有不到4000個開發者知道這個。

信息來源:跨平台的快速APP開發雲平台-DeviceOne桌面:Electron

Microsoft, Facebook, Slack, and Docker等公司都在用這個,先發優勢已經很明顯了。

信息來源:Apps


結貼沒?時間已經證明了一切,github等一些大型網站已經把部分功能轉為node.js了,時間證明了一切


推薦你看看:

Javascript的興起是否意味著LAMP的終結?

http://www.infoq.com/cn/news/2011/04/javascript-lamp

虛擬研討會:Node.js生態系統之框架、庫、最佳實踐

http://www.infoq.com/cn/articles/nodejs-frameworks


可以關注一下這個社區, http://cnodejs.org


以前的言論顯然已經不適合當今的node,希望有大拿能重新關注這個問題


我大PHP可是世界上最好的語言什麼Node.js不行


node.js上手很快,但是不敢用它來寫大的系統,高負載下慘不忍睹啊,只用來建立聊天之類的需要推送的部份,算是小應用吧

給我的感覺就像是mongodb,雖然知道mongodb很有特點,但是他擔心會導致數據丟失,公司不可能爲了速度犧牲數據.

在我看來這是非主流的技術,充其量就是敲敲邊鼓,做一些別的比較成熟的語言沒辦法解決的問題,就像lua一樣地位非常尷尬.


nodejs只是適用於小型項目,處理高並發,單核cup,根據項目選型進行選擇是否適用


推薦閱讀:

nodejs 應該學習哪些框架?
什麼是 GraphQL?
Node.js+Node-webkit的開發模式前景如何?
你寫過的最好的 Node.js 腳本是什麼?
nodejs的回調函數里為什麼需要return?

TAG:JavaScript | Nodejs |