如何才能學好Node.js

從接觸Node.js到現在颖变,一路摸爬滾打,雖然也談不上精通陪蜻,但對于如何學習Node.js邦马,還是有一些個人見解的,現在拿出來與大家共勉宴卖。一是對自己的總結滋将,二呢也希望能幫助到大家。

本文將包含以下內容:

  • 什么是Node.js
  • Node.js的應用場景
  • Node.js的學習指南
  • 擴展延伸

什么是Node.js

Node.js 是一個基于Chrome JavaScript 運行時建立的一個平臺症昏, 用來方便地搭建快速的随闽, 易于擴展的網絡應用。 Node.js 借助事件驅動肝谭, 非阻塞 I/O 模型變得輕量和高效掘宪,可以完美地處理時時數據, 非常適合 運行在分布式設備 的 數據密集型 的實時應用攘烛。通俗點就是 node.js是一個可以讓javascript運行在后端的上下文環(huán)境+很多方便的現成庫魏滚。

node.js最大的賣點在于完全異步的I/O模型。比于阻塞I/O坟漱,異步I/O模型極大提高web服務的并發(fā)性鼠次,對于I/O密集型應用來說,會有明顯的性能提升芋齿。例如對于大量采用Ajax long-polling的網站(典型的如聊天室腥寇,知乎的通知推送)能帶來很大的提升;因為每一個的long-polling請求都會占用服務器的連接數觅捆,雖然大部分連接處在空閑狀態(tài)赦役,但并發(fā)性不強的web框架最終會被大量的連接耗死。而node.js的異步I/O模型最適合于處理這樣的情形惠拭。

單線程不僅沒有降低吞吐率(因為異步)扩劝,也遠離了死鎖等同步不當導致的問題。node.js可以通過多進程來提高并發(fā)能力职辅;其次單進程多線程的程序往往在內存中共享數據棒呛,而內存不能跨機器訪問,因此限制了擴展到集群的能力域携。但是因為異步也帶來的一些問題:層層嵌套的回調簇秒,異常難以處理。由于程序的模型變成了異步秀鞭,node.js的代碼風格亦偏函數式趋观,對此沒有經驗的需要一定的時間來適應扛禽。因為node.js是基于javascript的,對于想成為全棧道同學皱坛,是個很不錯的選擇编曼。

目前使用Nodejs的公司有 LinkedIn, Yahoo, Paypal, eBay, Walmart,Groupon 還有很多的中小型公司剩辟,國內的公司如雪球掐场、淘寶、網易贩猎、百度等也都有很多項目運行在 Node.js 之上熊户。

Node.js的應用場景

** 適合 **

  1. JSON APIs——構建一個Rest/JSON API服務,Node.js可以充分發(fā)揮其非阻塞IO模型以及JavaScript對JSON的功能支持(如JSON.stringfy函數)

  2. 單頁面吭服、多Ajax請求應用——如Gmail嚷堡,前端有大量的異步請求,需要服務后端有極高的響應速度

  3. 基于Node.js開發(fā)Unix命令行工具——Node.js可以大量生產子進程艇棕,并以流的方式輸出蝌戒,這使得它非常適合做Unix命令行工具

  4. 流式數據——傳統(tǒng)的Web應用,通常會將HTTP請求和響應看成是原子事件欠肾。而Node.js會充分利用流式數據這個特點瓶颠,構建非常酷的應用刺桃。如實時文件上傳系統(tǒng)transloadit

  5. 準實時應用系統(tǒng)——如聊天系統(tǒng)、微博系統(tǒng)吸祟,但Javascript是有垃圾回收機制的瑟慈,這就意味著,系統(tǒng)的響應時間是不平滑的(GC垃圾回收會導致系統(tǒng)這一時刻停止工作)屋匕。如果想要構建硬實時應用系統(tǒng)葛碧,Erlang是個不錯的選擇

** 不適合**

  1. CPU使用率較重、IO使用率較輕的應用——如視頻編碼过吻、人工智能等进泼,Node.js的優(yōu)勢無法發(fā)揮

  2. 簡單Web應用——此類應用的特點是,流量低纤虽、物理架構簡單乳绕,Node.js無法提供像Ruby的Rails或者Python的Django這樣強大的框架

Node.js的學習指南

對于剛接觸Node.js的新手來說,第一步無非是打好基礎逼纸,你需要弄明白JavaScript 的特性語法和node的基本原理洋措。通過一些博文和書籍的學習,對node.js有了一個基本的了解后杰刽,可以嘗試搭建一個 HTTP 服務器菠发,返回 hello world (使用 HTTP 模塊)王滤;讀取一個 txt 文件,將內容顯示到命令行中(使用 fs 模塊)等等滓鸠。以提高自己的自信心雁乡。

Node.js 的活力所在是npm 上近 7W 的第三方模塊,當你對Node.js已經了解的差不多了糜俗,不妨用 Node.js 的第三方模塊做些好玩的事情踱稍。如搭建一個微博網站;寫一個簡單的爬蟲吩跋;調用一些網站的API做一些好玩的東西等等寞射。對一門技術有了足夠的信心后,此時應該深入了解下 Node.js 核心模塊的用法锌钮。好好看下Node.js 官方 API 文檔桥温。在此基礎上多加實踐。不管是用核心模塊還是外部模塊梁丘,嘗試用 Node.js 解決某個問題或者替換掉以前用其他語言寫過的代碼侵浸。

讀源碼可以先挑一些簡單的只實現某個特定功能的工具模塊的源碼讀,這種模塊的代碼通常在幾百行氛谜,閱讀起來并不是很困難掏觉,但是卻能漲不少的姿勢。比如:underscore (學習 JavaScript 的語法和技巧)值漫。在使用 Node.js 時發(fā)現沒有合適的模塊選擇或者選擇的模塊功能不盡人意澳腹,這個時候你可以嘗試去創(chuàng)建一個模塊或者修改現有的模塊,并且使用 npm 發(fā)布自己的模塊或者去該模塊的 GitHub 上提 PR 杨何。不斷的重復演練酱塔,想學不會都難。對于其它技術危虱,也是如此羊娃。

最后,要明白學習node最關鍵的是學習node的核心埃跷,也就是node本身蕊玷,而不是僅僅糾結于大量彼此沒有緊密聯系的工具和庫,因為他們不能幫助你加深對node本身的理解弥雹,如果你理解了核心垃帅,尤其是核心的概念(未必是語法和實現),理解整個生態(tài)系統(tǒng)的其他工具缅糟,庫挺智,應用也就成竹在胸了。事在人為,把您和大眾區(qū)分開來的不就是理解的深度嗎赦颇?

擴展延伸

沒有人是無師自通二鳄,把一些常用的網站整理下,分享給大家媒怯,也算是對自己的一個總結吧订讼。希望對需要的人能有些幫助。

學習網站

代碼示例

  • N-blog--nswbmw的基于node.js的個人博客源碼
  • awesome-nodejs--用node寫的很不錯的代碼集合

書籍

有些人不太愛看書扇苞,但一本好書是對一門技術的最系統(tǒng)的解釋欺殿。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鳖敷,隨后出現的幾起案子脖苏,更是在濱河造成了極大的恐慌,老刑警劉巖定踱,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棍潘,死亡現場離奇詭異,居然都是意外死亡崖媚,警方通過查閱死者的電腦和手機亦歉,發(fā)現死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畅哑,“玉大人肴楷,你說我怎么就攤上這事≤牛” “怎么了赛蔫?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長泥张。 經常有香客問我濒募,道長,這世上最難降的妖魔是什么圾结? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮齿诉,結果婚禮上筝野,老公的妹妹穿的比我還像新娘。我一直安慰自己粤剧,他們只是感情好歇竟,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抵恋,像睡著了一般焕议。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弧关,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天盅安,我揣著相機與錄音唤锉,去河邊找鬼。 笑死别瞭,一個胖子當著我的面吹牛窿祥,可吹牛的內容都是我干的。 我是一名探鬼主播蝙寨,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晒衩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了墙歪?” 一聲冷哼從身側響起听系,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎虹菲,沒想到半個月后靠胜,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡届惋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年髓帽,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脑豹。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡郑藏,死狀恐怖,靈堂內的尸體忽然破棺而出瘩欺,到底是詐尸還是另有隱情必盖,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布俱饿,位于F島的核電站歌粥,受9級特大地震影響,放射性物質發(fā)生泄漏拍埠。R本人自食惡果不足惜失驶,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枣购。 院中可真熱鬧嬉探,春花似錦、人聲如沸棉圈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽分瘾。三九已至胎围,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背白魂。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工汽纤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碧聪。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓冒版,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逞姿。 傳聞我的和親對象是個殘疾皇子辞嗡,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容