聲明:
- 本文適合白的不能再白的小白
- 不要被標題誤導,本文不會講nodejs基礎,只是本人學習流程和資料的一個整合
- 若是想找一大堆教程本身看,沒有電梯,本身拉到文章最下方吧
1、nodejs是什麼
前段時間,偶然獲得了一次跟幾個大牛學長學習的機會,他們正在作一個startup的項目,構建網站所使用的就是nodejs;對這個最近牛哄哄的東西,本身也只是略有耳聞,從何下手呢,打開百度,google一下。
首先,nodejs不是一種什麼編程語言,而是一個可讓javascript運行在服務器端的平臺,至於什麼nodejs由c++編寫,基於google chrome的v8引擎,一律忽略;你須要知道的是,之前你用php/java寫服務器端的代碼,如今可使用nodejs完成,並且不須要太多的新知識。
if(足夠熟悉js){
go on……
}else{
window.location('http:www.baidu.com');
and search 'javascript 入門教程'+去吧-_-;
}
其次,使用nodejs開發你可使用windows/linux/macos,任何一個環境,可是用windows感受怪怪的,推薦linux(such as ubuntu).至於安裝什麼的,本身解決吧。
接下來你最想知道的可能就是,我現有的工具作開發,挺好的,你有啥麼理由讓我轉到nodejs這來呢? 因此看看nodejs能幹什麼吧。
2、nodejs能幹什麼
Node 公開宣稱的目標是 「旨在提供一種簡單的構建可伸縮網絡程序的方法」。(摘)當前的服務器程序有什麼問題?咱們來作個數學題。在 Java™ 和 PHP 這類語言中,每一個鏈接都會生成一個新線程,每一個新線程可能須要 2 MB 的配套內存。在一個擁有 8 GB RAM 的系統上,理論上最大的併發鏈接數量是 4,000 個用戶。隨着您的客戶羣的增加,若是但願您的 Web 應用程序支持更多用戶,那麼,您必須添加更多服務器。除這些成本上升外,還有一個潛在技術問題,即用戶可能針對每一個請求使用不一樣的服務器,所以,任何共享資源都必須在全部服務器之間共享。鑑於上述全部緣由,整個 Web 應用程序架構(包括流量、處理器速度和內存速度)中的瓶頸是:服務器可以處理的併發鏈接的最大數量。
Node 很是適合如下狀況:在響應客戶端以前,您預計可能有很高的流量,但所需的服務器端邏輯和處理不必定不少。
總結起來就是:其它服務器端語言能幹的它幾乎都能勝任,並且這貨能處理高併發,節省服務器成本。而它又不是諸如apache這種服務器軟件的一個替代品,它的理想目標是:提供高度可伸縮服務器。
看到這又暈了是麼?別管了,看看本身建立一個服務器,處理request、response是什麼感受吧。
3、怎麼學nodejs
1. 須要哪些基礎
js的基礎是必須的,並且並非簡單的瞭解就能夠,前端的東西也必須掌握把,否則你怎麼構建一個完整的網站應用呢。
2.從哪裏下手
當時學的時候,苦於國內沒有一個很好的教程,也不能說教程很差,可能他們都是站在一個相對較高的視角去講述這個東西,一下就來了一大堆東西在那講,想看視頻學的同窗暫時仍是不要有這個想法了,基本上沒有適合入門的教程,若是你非要找,英語水平能夠的話,51cto上有一個我感受還不錯:
1>nodejs基礎
2>基礎過關了,進階使用框架
你可能想去嘗試建立一個本身的應用,那就要介紹express了,這也是在開發一個大型項目中必需要用到的,但若是你足夠任性我也沒辦法。express是nodejs的一個框架,就像你用基本java web知識能夠構建網站,但使用SSH能夠更快、更清晰。就像你學PHP,直接建站沒問題,可是有像YII,tp等等的框架,不少輪子就不須要你重複造了。
express也是一樣的道理,做者參考了Ruby的Sinatra.rb,完成了一個基於nodejs的實現(此句可忽略),有了基礎就要實踐了,上面的教程可能也或多或少講到express,可是上面就把重點放在nodejs基礎上,下面纔是express:
- 若是你暫時還不想看官方文檔,能夠先看看阮一峯阮大大的《Express框架》 http://javascript.ruanyifeng.com/nodejs/express.html
- 而後呢,你就能夠建立一個博客應用試試了,來吧跟着作(發現這個教程的時候,有種相見恨晚,要的就是你的感腳)url:https://github.com/nswbmw/N-blog/wiki
- 可是官方文檔是不能不放在這裏地,有問題先看看手冊吧:http://expressjs.com/
3>前端怎麼辦
上面的內容都搞定了,前端難道仍是用html麼,呵呵,被你猜對了,仍是html,只不過是換種方式寫html,前端的模板引擎目前有EJS、Jade、React等。
jade我我的不喜歡,那種靠縮進、空格、換行來組織代碼的小shit,不習慣,很少講,想學的,自行google吧。
react並不算是一個完整的MVC框架,也就算是V,對C算是有錦上添花的做用吧,組件化的開發思路,這也應該是一個趨勢,「在js中寫html,你感覺感覺」。
" 在Web開發中,咱們總須要將變化的數據實時反應到UI上,這時就須要對DOM進行操做。而複雜或頻繁的DOM操做一般是性能瓶頸產生的緣由(如何進行高性能的複雜DOM操做一般是衡量一個前端開發人員技能的重要指標)。React爲此引入了虛擬DOM(Virtual DOM)的機制:在瀏覽器端用Javascript實現了一套DOM API。基於React進行開發時全部的DOM構造都是經過虛擬DOM進行,每當數據變化時,React都會從新構建整個DOM樹,而後React將當前整個DOM樹和上一次的DOM樹進行對比,獲得DOM結構的區別,而後僅僅將須要變化的部分進行實際的瀏覽器DOM更新。"想一想不就應該這樣麼。
學長跟我說,React水很深,若是能成爲專家,前途無量。聽得心潮澎湃呢 :) ,無論怎麼說react入門確實有必定的難度,
小結:
看完這些基本上對nodejs的知識有一個完整的體系了,若是基礎很差,也沒了解過python這樣的語言,對於nodejs這種所謂基於事件的異步式編程可能讓你非常痛苦,看人家的代碼,可能發現好多東西不知道,不要緊那些依賴庫都是nodejs社區你們貢獻的,每一個拿來用就能夠了,並不須要專門研究,也不用感受好像東西很雜,便心生煩躁,想放棄,這也只是一個過程,糾結事後就撥開雲霧見青天了。
附錄:
- 資料一:知乎,怎樣有效地學習 Node.js:http://www.zhihu.com/question/19793473
- 資料二:quora: http://www.quora.com/What-are-the-best-resources-to-learn-Node-js