用了一年多 Node.js, 如今已是 Node.js 的腦殘粉了,這篇日誌比較雜,算是我對 Node.js 方方面面的一個集中吐槽。前端
首先是性能,用起來感受 Node.js 的性能並無想象中那麼好。內存佔用差很少和 Ruby 一個等級,比 Python, PHP 要多。計算性能(即 CPU 使用)上,純計算並無太大優點,但由於能夠很好地控制異步流程,因此整體表現上來看性能要比 PHP 好不少。我的以爲 Node.js 在性能方面是有很大的潛力的,由於有不少大的項目在致力於提升 JavaScript 虛擬機的性能——好比各大瀏覽器;同時 JavaScript 是一個語法簡單的語言,也是一個開放標準,不像 Python 和 PHP 同樣由於顧及兼容性,很難進行大的重構來改善性能。node
而後是包管理器和庫,Node.js 內置了 npm, 由於 npm 是個很是好用的包管理器,由於 JavaScript 的編寫門檻低,由於 JavaScript 原本就有不少優秀的前端庫被移植到了後端,因此 NPM 上的包如今已經多於 PyPI 和 RubyGems 了,而後遠超 PEAR 和 Composer. Node.js 的開發中不一樣於 PHP 的一點就是你們都不怕加依賴,每一個小需求都去 NPM 上找已有的庫來實現——並且每每都能找到。因此 Node.js 的開發基本上就是在組合依賴,而後傾向於把一個即便很小的獨立需求寫成一個庫,這卻是和 UNIX 的思路比較像。再另外一方面,Node.js 社區對開源十分友好,這裏的友好是指大多數的庫都是在 Github 上開放開發的,並且使用的是很是寬鬆的協議,例如 MIT, 不像 GPL 那麼具備「攻擊性」。git
社區,Node.js 的應用大部分仍是 Web 後端,而 Web 後端相關的庫基本都是那麼幾個大牛搞起來的,例如 express, jshttp, jade, mocha 和 koa 就是以 TJ 大神爲首的四五我的開發起來的,這卻是個有趣的現象。——雖然 TJ 大神最後決定淡出 Node.js 社區。github
工具鏈,Node.js 比較年輕,不少好用的工具都是近兩年剛剛出現的,例如預編譯方言, 單元測試和模擬測試,構建工具等;不敢說有多好,可是要比 PHP 好很是多。至於緣由,首先很大程度是由於這些庫都是既可用於前端又可用於後端的,由於 Web 前端的硬需求,讓 Node.js 順便得益;而後就是由於 JavaScript 靈活而簡單的語法,讓這些工具能夠以一些很是巧妙而優雅的方式來實現。至於 IDE, 依然得益於 Web 前端,仍是有一些 IDE 可用的——雖然 JavaScript 語言自己不是很利於靜態分析。web
語法,我還要再強調一下 JavaScript 的語法簡單而靈活,其中重要的一點是 JSON, JSON 幾乎是目前 Web 領域最通用的數據格式,而在 JavaScript 對 JSON 具備原生的支持!JavaScript 中全部的數據結構都是圍繞着 JSON 的一個超集——Object 展開的,包括數組,函數,對象和類。固然這樣也帶來一個麻煩,就是由於寫起來限制少,致使不知道該怎麼寫,剛開始學習的時候總免不了反覆重構,才能摸清各類設計模式在不一樣狀況下的優劣,找到適合本身和適合具體項目的寫法,因此能夠說 Node.js 入門簡單,但要構建大型項目,仍是比較考驗開發者的功力的。由於歷史遺留問題,JavaScript 的語法算不上優美,不過還好咱們有各類預編譯方言,好比 Coffee Script, TypeScript, Dart, LiveScript 以及 ClojureScript, 總有一款適合你。express
使用場景,JavaScript 是一個通用的編程語言,Web 先後端天然沒必要說,來看看其餘方面。我的覺得 Node.js 仍是很適合用來編寫服務器工具的,或稱運維工具,由於運維中不少狀況是能夠異步工做的,JavaScript 又有比較不錯的正則支持,替代 bash 和 Python 也問題不大;Node.js 只需裝好解釋器,就能夠隨便用,不用畏手畏腳地避免引入依賴。而桌面和移動設備編程,Node.js 有 node-webkit 以及其餘各類外殼,雖然目前使用體驗不是很好,可是能夠很是顯著地下降開發成本,輕鬆跨平臺,想必前途也是光明的。npm
最後說學習 Node.js, 在我看來,學習 Node.js 分兩點,一是要理清 Node.js 的「基於事件回調的異步 IO」,這是 Node.js 與其餘主流編程語言最不一樣的一點。而後第二步就是把 NPM 上 Top 100 的庫都看一下,不用細看,只要混個臉熟,知道每一個庫是幹嗎的就好了。完成這兩步,那麼恭喜你,已是一個 Node.js 開發者了。編程