摘要:譯者覺得作者的比喻很適合初學者理解,特此翻譯。進一步說,回調(diào)觸發(fā)的順序是不能被保證的。所以我不必擔心代碼在同一時間訪問同一個數(shù)據(jù)結(jié)構(gòu)你確實理解了,這就是的單進程事件循環(huán)設(shè)計美麗的地方。
前言
總括 :這篇文章十分生動形象的的介紹了Node,滿足了讀者想去了解Node的需求。作者是Node的第一批貢獻者之一,德國前端大神。譯者覺得作者的比喻很適合初學者理解Node,特此翻譯。
譯者 :原文網(wǎng)址里有只小螞蟻的效果很有意思(多次鼠標懸浮會有驚喜),哈哈哈,可以去看一下哦。
原文地址:[Understanding node.js]
原文作者:Felix Geisend?rfer
Node小應(yīng)用:Node-sample
譯者:Damonare
本文屬于譯文
正文當我向別人介紹Node.js?的時候一般會有兩種反應(yīng),要么是立馬就弄明白它是個什么玩意兒,要么是被它搞的很糊涂。
如果你現(xiàn)在還處于后者,下面就是我對于node的解釋:
它是一個命令行工具,你可以下載一個tarball文件,編譯然后安裝源文件;
它可以讓你在你的終端輸入node my_app.js 來運行Javascript程序;
Node的JS代碼是由?V8 javascript 引擎(就是那個使得Chrome如此之快的東西)所執(zhí)行的;
Node提供了諸如訪問網(wǎng)絡(luò)或是操作文件系統(tǒng)的Javascript API
“但我也可以用?Ruby, Python, Php,Java, ...等語言來做我想要做的事啊”我聽到你說的話了,你是對的。Node不是狡猾的獨角獸,這點很抱歉,它不會幫你做你該做的事。它僅僅是一個工具,而且他也不會替代你現(xiàn)在所常用的一些工具,至少現(xiàn)在不會。
"說重點?。。?好的,我會的,當你需要同時做好幾件事的時候Node會表現(xiàn)的十分優(yōu)秀。你有寫了一段代碼然后對他說"我想你可以并行運行!"的體驗嗎?哈哈哈,在Node中除了你的代碼所有的東西都是并行運行的。
"啊?!"是的,沒錯,除了你的代碼之外所有的代碼都是并行運行的。為了理解這一點,你可以把你自己的代碼想象成一個國王,而Node就是他的仆人軍隊。
新的一天是這樣開始的:某個仆人叫醒了國王,然后問他是否需要什么。國王給了這個仆人一個任務(wù)清單然后就回去繼續(xù)睡覺了。然后這個仆人就把任務(wù)清單上的任務(wù)分發(fā)下去,仆人們開始工作了。
當一個仆人完成了他的任務(wù)的時候,他就跑到國王寢宮外面排隊等候報告。國王一次只能聽取一個仆人報告任務(wù),有的時候國王會在仆人報告結(jié)束的時候給他更多的任務(wù)。(看你代碼咋寫咯)
生活是美好的,因為國王的諸多仆人同時執(zhí)行多個任務(wù),但報告結(jié)果的時候是一個一個來的,所以國王能夠很專注。
"那確實很美好,但你能結(jié)束這個愚蠢的比喻用更加geek的方式來告訴我嗎?"好的,一個node程序或許是下面這樣的:
var fs = require("fs") , sys = require("sys"); //譯者注:sys is deprecated. Use util instead.這里我們直接用console.log即可 fs.readFile("treasure-chamber-report.txt", function(report) { //sys.puts("oh, look at all my money: "+report); console.log("oh, look at all my money: "+report) }); fs.writeFile("letter-to-princess.txt", "...", function() { //sys.puts("can"t wait to hear back from her!"); console.log("can"t wait to hear back from her!") });
你的代碼(國王)給了node(仆人)兩個任務(wù)即讀(readFile)和寫(writeFile)文件,然后就去睡大覺了。一旦node完成了某個任務(wù),跟這個任務(wù)對應(yīng)的回調(diào)就會觸發(fā)。但同一時間只能有一個回調(diào)被觸發(fā),在那個回調(diào)執(zhí)行完成之前,所有其它的回調(diào)都得排隊等待。進一步說,回調(diào)觸發(fā)的順序是不能被保證的。
"所以我不必擔心代碼在同一時間訪問同一個數(shù)據(jù)結(jié)構(gòu)?"你確實理解了,這就是JavaScript的單進程/事件循環(huán)設(shè)計美麗的地方。
"好棒,但我為什么應(yīng)該用它呢?"一個原因是效率。在一個web應(yīng)用中,響應(yīng)時間主要是花在了執(zhí)行數(shù)據(jù)庫查詢上面,而用node,你可以一次性執(zhí)行所有的數(shù)據(jù)庫查詢。將響應(yīng)時間減少到了執(zhí)行最慢的數(shù)據(jù)庫查詢所用的時間。
另一個原因是Javascript。你可以使用Node讓你的瀏覽器和后端共享代碼。Javascript也在漸漸成為一門真正的通用語言。不管你在過去是用Python, Ruby, Java, PHP, ...等等,你都或多或少的使用過Javasctipt,對嗎?
最后一個原因是原生速度。V8正在不斷的推進作為地球上最快的動態(tài)語言編譯器之一的邊界,我也想不到有任何其它的語言在速度上能夠像Javascript一樣不斷的高歌猛進。再進一步說,node的I/O設(shè)備真的十分的輕量,能夠讓你盡可能最大程度的利用系統(tǒng)的I/O容量。
"所以你是說從現(xiàn)在開始我應(yīng)該用Node寫我所有的應(yīng)用么?"是也不是,一旦你開始舞弄node這柄錘子,所有的東西都會開始變得像釘子。但如果你當前的工作有一個deadline,你可以參考下面的幾點來做決定用不用node:
低響應(yīng)時間/高并發(fā)是否重要?Node真的很擅長處理這倆問題;
項目有多大?小項目沒問題,如果是大項目就應(yīng)該認真評估了(可用的庫,修復一個bug所需的資源或者two upstream等等)
"我能在Node中訪問DOM嗎?"這是一個好問題!答案是不行,DOM是瀏覽器的東西嗎,不過幸好node的JS引擎(V8)跟那些混亂的東西是完全分離的。不過,有人在以node模塊的形式來實現(xiàn)DOM,或許帶來令人興奮的可能性比如對客戶端代碼進行單元測試。(譯者注:現(xiàn)在已經(jīng)有人實現(xiàn)了這個模塊,詳情查看Node-dom)。
"難道事件驅(qū)動編程真的很難嗎?"這取決于你自己,如果你已經(jīng)學會了如何在瀏覽器里調(diào)用Ajax或是調(diào)用某個事件,那么學習node對你不會是什么難題。
同時,測試驅(qū)動開發(fā)能夠真正的幫助你從做一個可維護的設(shè)計開始學習node。
"我應(yīng)該從哪里學到更多?"Tim Caswell正在運作優(yōu)秀的How To Node博客。在twitter上Follow?nodejs。訂閱郵件列表。(譯者注:也可以結(jié)合Node.js 6.9.5 文檔進行學習,另外,譯者寫了一個node的小應(yīng)用node-sample可以clone下來看下)
后記本篇文章的比如講真是有些簡單了,但從現(xiàn)實事物中找到真正相對應(yīng)的也是在太難。,另外,由于時間原因,本文一些不妥之處或是當時還處在實驗性階段的東西譯者或刪或改。能力有限,水平一般,翻譯不妥之處,還望指正。感謝。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86785.html
摘要:進一步說,對于回調(diào)觸發(fā)的順序是無法保證的。時刻在向成為全球最快的動態(tài)語言解釋器之一而努力。正在為對進行實驗,正在使用它處理大規(guī)模的,并且由于而出名正在創(chuàng)建一個令人興奮的游戲引擎,其中后端使用了一些代碼。 一篇2010年的文章,自己讀完后一些對node.js的疑問迎刃而解,由于文章比較舊,所以文中描述的情況有些已經(jīng)發(fā)生了變化,在翻譯過程中會一一指出。 原文:http://debugga...
摘要:正好最近在學習的各種實現(xiàn)原理,在這里斗膽翻譯一篇垃圾回收機制原文鏈接。自動管理的機制中,通常都會包含垃圾回收機制。二垃圾回收機制的概念垃圾回收,是一種自動管理應(yīng)用程序所占內(nèi)存的機制,簡稱方便起見,本文均采用此簡寫。 最近關(guān)注了一個國外技術(shù)博客RisingStack里面有很多高質(zhì)量,且對新手也很friendly的文章。正好最近在學習Node.js的各種實現(xiàn)原理,在這里斗膽翻譯一篇Node...
摘要:畢竟官方文檔才是未經(jīng)提煉的純技術(shù)點,讀書不能只讀二手書。目前網(wǎng)上能找到的中文文檔基本都是基于的,但截至此文發(fā)布,最新的穩(wěn)定版都已經(jīng)是了。翻譯過程中主要參考官方英文文檔,以及極客學院的官方文檔中文翻譯。 前言 相信很多開發(fā)者和我一樣,在學習一門技術(shù)的時候,通過網(wǎng)上的各種教程和視頻入門之后會發(fā)現(xiàn)自己遇到一個上升瓶頸。造成這個瓶頸的很大一部分原因,我認為是進階教程的知識點過于分散,同時高質(zhì)量...
摘要:用法具體的參數(shù)及腳本運行方式,請參考命令行工具章節(jié)。示例用寫的一個返回的服務(wù)器示例要運行此服務(wù)器,將上面所示代碼放入文件,并用執(zhí)行它本文檔中所有的示例均可以類似方式運行。全文目錄請查看全文目錄 用法 node [options] [v8 options] [script.js | -e script] [arguments] 具體的option參數(shù)及腳本運行方式,請參考命令行工具章節(jié)。...
摘要:正文的實踐幾個月前,引擎加入了特性。注意目前特性只在非穩(wěn)定版本的中才有。暫時建議不要用于生產(chǎn)環(huán)境。意思是它能以非阻塞的方式暫定代碼的執(zhí)行,以等待上一個結(jié)果返回。在此之前,還它只能通過轉(zhuǎn)譯器來實現(xiàn)。 來自新手向國外技術(shù)博客RisingStack的又一篇Node.js相關(guān)技術(shù)文章,原文請看此。 正文 Node.js v7的async/await實踐 幾個月前,JavaScript引擎V8加...
閱讀 2937·2021-10-14 09:43
閱讀 2882·2021-10-14 09:42
閱讀 4662·2021-09-22 15:56
閱讀 2371·2019-08-30 10:49
閱讀 1593·2019-08-26 13:34
閱讀 2385·2019-08-26 10:35
閱讀 604·2019-08-23 17:57
閱讀 2029·2019-08-23 17:15