謹(jǐn)以此篇紀(jì)念開始接觸 nodeJs 的自己,希望未來乘風(fēng)破浪、披荊斬棘。
Nodejs 框架是基于 V8 的引擎,是目前速度最快的 Javascript 引擎。chrome 瀏覽器就基于V8,同時(shí)打開 20-30 個(gè)網(wǎng)頁都很流暢。Nodejs 標(biāo)準(zhǔn)的 web 開發(fā)框架 Express,可以幫助我們迅速建立 web 站點(diǎn),比起 PHP 的開發(fā)效率更高,而且學(xué)習(xí)曲線更低。非常適合小型網(wǎng)站、個(gè)性化網(wǎng)站建設(shè)。
Nodejs 的介紹
Node.js 的是建立在 Chrome 的 JavaScript 的運(yùn)行時(shí),可方便地構(gòu)建快速,可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用程序的平臺。Node.js 使用事件驅(qū)動,非阻塞 I/O 模型,輕量、高效,可以完美地處理實(shí)時(shí)數(shù)據(jù),運(yùn)行在不同的設(shè)備上。
為什么要用 Nodejs?
從我使用體會來說,NodeJS 有 4 大優(yōu)勢:
- Nodejs 基于 Javascript 語言,不用再單獨(dú)新學(xué)一門陌生的語言,從而減低了學(xué)習(xí)的門檻。同時(shí),Javascript 語言在 Web 前端開發(fā)中至關(guān)重要,特別 HTML5 的應(yīng)用必須要使用,所以前后臺統(tǒng)一語言,不僅可以實(shí)現(xiàn)程序員的全棧開發(fā),還可以統(tǒng)一公共類庫,代碼標(biāo)準(zhǔn)化。單憑這一 點(diǎn),Nodejs 就已經(jīng)贏得市場的青睞了。
- Nodejs 并沒有重新開發(fā)運(yùn)行環(huán)境,而是選擇了目前最快的瀏覽器內(nèi)核 V8 做為執(zhí)行引擎,保證了 Nodejs 的性能和穩(wěn)定性。
- Nodejs 的開發(fā)非常高效,而且代碼簡單,得意于 Nodejs 的單線程機(jī)制。而 Nodejs 的另一個(gè)特點(diǎn)異步編程,讓 Nodejs 處理 IO 密集型應(yīng)用有了明顯的優(yōu)勢。個(gè)人感覺,用 Nodejs 比 Java做 Web 開發(fā)要高效 10 倍,比 PHP 的代碼還要簡單。
- Nodejs 的社區(qū)在壯大,不僅包的數(shù)量在快速增加,而且包的質(zhì)量也要明顯好于其他語言的。很多明星級的包,都是簡單而靈巧的,為了開發(fā)者的使用習(xí)慣而設(shè)計(jì)。我最常用到的工具包,如 socket.io、moment.js、underscore.js、async.js、express.js、bower.js、grunt.js、forever.js…確實(shí)在改變我以前的編程習(xí)慣。
當(dāng)然,除了我使用Nodejs的理由,很多公司也都有自己的使用理由。
ebay選擇Nodejs的理由,可以歸納為以下4點(diǎn): - 動態(tài)語言:開發(fā)效率非常高,并有能力構(gòu)建復(fù)雜系統(tǒng),如ql.io。
- 性能和 I/O 負(fù)載:Nodejs 非常好的解決了 IO 密集的問題,通過異步 IO 來實(shí)現(xiàn)。
- 連接的內(nèi)存開銷:每個(gè) Node.js 進(jìn)程可以支持超過 12 萬活躍的連接,每個(gè)連接消耗大約 2K 的內(nèi)存。
- 操作性:實(shí)現(xiàn)了 Nodejs 對于內(nèi)存堆棧的監(jiān)控系統(tǒng)。
Nodejs不適合的領(lǐng)域
每一種語言或平臺都有不擅長領(lǐng)域,對于Nodejs來說最不擅長的領(lǐng)域在于CPU和內(nèi)存的編程操作。
- 計(jì)算密集型應(yīng)用,讓 Javascript 和 C 去拼計(jì)算性能,估計(jì)是不可能贏的。
- 內(nèi)存控制,讓 Javascript 和 Java 比較復(fù)雜數(shù)據(jù)類型定義,也是很困難的。因?yàn)?Javascript 的面向?qū)ο笫腔?JSON 的,而 Java 是直接使用內(nèi)存結(jié)構(gòu)。所以,通過 JSON 序列化和反序列的過程控制內(nèi)存,Javascript 就已經(jīng)輸了。
- 大內(nèi)存的應(yīng)用,由于 V8 引擎有內(nèi)存設(shè)計(jì)的限制,32 位環(huán)境中最大堆是 1G,64 位環(huán)境中最大堆也不到 2G,如果要一次讀入 10G 數(shù)據(jù),對于 Nodejs 來說也無法實(shí)現(xiàn)。
- 靜態(tài)服務(wù)器,雖然 Nodejs 的優(yōu)勢在 IO 密集集應(yīng)用,但是和 Nginx 的處理靜態(tài)資源還是有很大的差距。
- 不需要異步的應(yīng)用:比如系統(tǒng)管理,自行化腳本等,還是 Python 更順手,Nodejs 的異步調(diào)用可能會給編程帶來一些麻煩。
Node.js學(xué)習(xí)路線
我們看到Node.js已經(jīng)被廣發(fā)地應(yīng)用在各種的場景了,針對Node.js的應(yīng)用場景,我們應(yīng)該如何學(xué)習(xí)Node.js呢?
大家可按以下所列路線進(jìn)行學(xué)習(xí):
- 項(xiàng)目管理:npm、grunt、bower、yeoman
- Web開發(fā):express、ejs、hexo、socket.io、restify、cleaver、stylus、browserify、cheerio
- 工具包:underscore、moment、connet、later、log4js、passport、passport(oAuth)、domain、require、reap、commander、retry
- 數(shù)據(jù)庫:mysql、mongoose、reids
- 異步:async、wind
- 部署:forever、pm2
- 測試:jasmine、karma
- 跨平臺:rio、tty
- 內(nèi)核:cluster、http、request
- 算法:ape-algorithm(快速排序)、ape-algorithm(桶排序)
從零開始nodejs系列文章
本文參考鏈接:
http://blog.fens.me/series-nodejs/
https://www.cnblogs.com/agileai/p/5159485.html