標籤:
Nodejs的優缺點,這裡面講的比較詳細。有時間可以多看看別人的分析。
https://www.zhihu.com/question/19653241
Node.js 的架構與 Django, Rails 等傳統的 Framework 不同,不需要放在 Nginx / Apache 後,利用 WSGI, CGI 之類的介面一板一眼的 [接受Request] -> [運行程式邏輯] -> [產生並返回Response]。這是一個巨大的變化,之前一些無法想象的功能都有可能實現了。比如 https://github.com/Miserlou/DirtyShare 可以用瀏覽器實現 P2P 的檔案傳輸。正因為 Node.js 可以更精細的控制 Request 和 Response 的時間和內容,websocket 似乎天生就是為 Node.js 而生的,而配合 http://socket.io 這個神奇的庫之後,在 realtime webapp 這個領域,Node.js 已經沒有對手了。Node.js 的包管理器 npm 設計得比 python 和 ruby 好很多。有很多的 module 開發人員。當然也有一些缺點Debug 很困難。沒有 stack trace,出了問題很難尋找問題的原因。如果設計不好,很容易讓代碼充滿 callback 。實在受不了的可以考慮一下 https://github.com/laverdet/node-fibers/ 這個項目。不過 Node.js 的核心團隊並不推薦使用。
我們在用 Node.js 處理知乎主站的 web 即時推送。你現在看到的 Feed 、訊息的即時更新,背後就是幾個 node 進程扛起來的。優點:1. 處理高並發情境效能更高在用 http://socket.io 之前,推送服務是用 ajax polling 做的。我們用 Tornado 和 Node.js 做過兩個版本的推送服務。在當時的測試環境下,Node.js 的 CPU 時間是 Tornado 的三分之一,記憶體使用量是 Tornado 的一半,程式碼數只有 Tornado 的三分之一(Node.js 版是用 coffee 寫的)。後來我們使用了 http://socket.io,CPU 開銷進一步降低。2. 函數式編程非常適合寫非同步回調鏈用 Node.js 配合 CoffeeScript 寫非同步作業鏈非常便利,相比之下 Tornado 無論是寫命名函數的回調,還是 yield 一個 Task 都沒那麼自然。缺點:1. 大量匿名函數使異常棧變得不好看。2. 無法以 request 為單位 catch 異常,必須確保不要在不 catch 異常的第三方庫的回調裡的拋異常,這在一個非同步作業鏈條裡是一件比較麻煩的事。解決方案之一是對那些不 catch 異常的第三方庫做一些封裝,把所有的異常變成事件,改成 on(‘error‘) 形式的 API。
【轉載】【Todo】Nodejs的優缺點