【譯】理解node

我已經(jīng)介紹過Node.js一般會引起兩種反應(yīng):人們一般會立即“理解”或者因為困惑而終止。

如果你現(xiàn)在已經(jīng)在第二組里,請看我試著解釋node:

它是一個命令行工具。你下載一個tarball,解壓并安裝源代碼。

它允許你在終端輸入'node my_app.js'運行Javascript程序。

JS運行于V8 javascript engine(它是的Google Chrome如此之快)。

Node提供一個Javascript APT來鏈接網(wǎng)絡(luò)和文件系統(tǒng)。

“但我能用ruby, python, php, java, ... 做任何事!”

我聽到了。你是對的!對不起,Node不是來幫你做工作的奇怪的獨角獸。它只是一個工具,它可能不會完全地代替你常規(guī)的工具,至少目前不會。

"直截了當(dāng)?shù)卣f!"

好吧,我會的?;旧希?dāng)你需要同時做很多事的時候,Node很好。你曾經(jīng)寫過一段兒代碼并說“我希望這能夠并行的運行”?好,Node里一切都是并行的運行,除了你的代碼。

"嗯?"

就是這樣,一切都是并行運行的,除了你的代碼。為了理解這點,想象你的代碼是國王,node是他的仆人軍隊。

日子是從一個仆人喚醒國王問他所需開始的。國王給這位仆人一張任務(wù)列表然后再小睡一會。這位仆人開始向他的同事們分發(fā)任務(wù)并讓他們工作。

每當(dāng)一位仆人完成一份工作,當(dāng)他完成一個任務(wù),他就排列好給國王匯報。國王每次讓一名仆人進(jìn)來聽他匯報。有時,當(dāng)他走出去的時候國王會給他更多的的任務(wù)。

生活很美好,對于國王的仆人,他們并行地攜帶他的任務(wù),但是同事只匯報一個結(jié)果, 這樣國王可以專注。

"那太棒了,但是你能不做愚蠢的比喻而認(rèn)真的對我講嗎?

當(dāng)然。一個簡單的Node程序這這樣的:

代碼

你的代碼給Node兩個任務(wù)讀寫一個文件,然后休眠。當(dāng)Node完成一個任務(wù),回調(diào)函數(shù)被觸發(fā)。但是這里只能同時運行一個回調(diào)函數(shù)。直到回調(diào)函數(shù)執(zhí)行完畢之前,所有其他回調(diào)函數(shù)需要排隊等待。另外,執(zhí)行任何一個回調(diào)函數(shù)是無序的。

“所以我不需要擔(dān)心代碼同時解除相同的數(shù)據(jù)?”

你明白了!這就是全部Javascript單線程/事件輪詢的精華!

"很好,但是我為什么要用他呢?"

一個原因是高效。在一個web應(yīng)用中,主要的響應(yīng)花費在執(zhí)行查詢數(shù)據(jù)庫。使用Node,會減少響應(yīng)的時間當(dāng)執(zhí)行最慢的查詢。

另外一個原因是JavaScript。你能在瀏覽器和服務(wù)器之間分享代碼。JavaScript也正在成為全球性的編程語言。無論你過去是否做過python, ruby, java, php...... 在過程中你可能會用到j(luò)avascript,對吧?

最后一個原因就是運行速度。V8引擎在這個星球上不斷擴(kuò)張他的境界。我現(xiàn)在 無法想到哪個語言會在速度方面對JavaScript造成威脅。另外,In addition to that, node的I/O設(shè)備非常輕量,會讓你盡可能地完全地利用你全部系統(tǒng)的空間。

"所以你勸說我從現(xiàn)在開始用node來做所有我的應(yīng)用?"

可以這么說但又不是。一旦你開始揮動node的錘子,一切都看起來像個釘子。但是如果你正在做一個很緊迫的項目,你也許需要以下幾個依據(jù)來做決定:

低響應(yīng)時間,高并行更重要?Node擅長于此。

項目多大? 小項目還適合。大項目應(yīng)該仔細(xì)評估(多種類庫,資源用來修改問題,或者逆流而上,等等)。

"Node可以運行在windows嗎?"

不行。如果你在windows,你需要用Linux運行一個虛擬機(jī)(我推薦VirtualBox)。Windows支持node在計劃之中,除非你想幫助他,否則你得屏住呼吸等幾個月。

"在node中我能鏈接DOM嗎?"

問的非常好!答案是不行,DOM是瀏覽器的東西,node JS的運行引擎應(yīng)該從那混亂中完全地分開。然而,有些人正在做這樣的事:the DOM as a node module, 這會讓許多有趣的事變成可能,比如在可以互動進(jìn)行單元測試。

"事件驅(qū)動編程很難嗎?"

那就不一定了。如果你已經(jīng)學(xué)會了在瀏覽器里玩AJAX的請求和響應(yīng),那么適應(yīng)node應(yīng)該不是問題。無論如何,測試驅(qū)動開發(fā)能幫你想到可維護(hù)的設(shè)計。

"誰在用呢?"

這里是一個小的不完全的列表node wiki(找到 "Companies using Node").Yahoo正在給YUI做node實驗Plurk正在應(yīng)用于很多的comet。并且, Paul Bakaus 正在建立mind-blowing game engine一些node后端的東西。


??????? ———— 2015.10.15?摘自Debuggable,原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容