成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

「譯文」理解Node.js

jsummer / 665人閱讀

摘要:進一步說,對于回調觸發(fā)的順序是無法保證的。時刻在向成為全球最快的動態(tài)語言解釋器之一而努力。正在為對進行實驗,正在使用它處理大規(guī)模的,并且由于而出名正在創(chuàng)建一個令人興奮的游戲引擎,其中后端使用了一些代碼。

一篇2010年的文章,自己讀完后一些對node.js的疑問迎刃而解,由于文章比較舊,所以文中描述的情況有些已經(jīng)發(fā)生了變化,在翻譯過程中會一一指出。

原文:http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb

當我把Node.js介紹給人們的時候,通常會產(chǎn)生兩種反應??偟膩碚f人們不是可以正確的理解它,就是被搞得非常糊涂。

如果你到目前為止還處于第二組里,下面是我想要用來講解node的內(nèi)容:

它是一個命令行工具。你下載一個tarball文件,編譯并安裝源碼。

它可以讓你在你的終端中通過輸入"node my_app.js"來運行JavaScript程序。

JS是被V8 javascript引擎(使Google Chrome運行如此之快的東西)所執(zhí)行的。

Node提供了一個用來訪問網(wǎng)絡和文件系統(tǒng)的JavaScript API。

“但是我可以做任何我想要做的事情用:ruby,python,php,java, ... !”

我聽到了你的聲音。你是對的。Node不是該死的獨角獸,它不會幫你做你自己的工作,抱歉。它只是一個工具,并且它大概也不會完全地替換你常用的工具,至少當前不會。

“說重點!”

好的,我會的。Node總的來說非常優(yōu)秀當你需要同時做許多事情的時候。你有過寫了一部分代碼然后說“我想要這個并行執(zhí)行”嗎?好吧,在node中任何東西都是并行運行的,除了你的代碼。

“嘿?”

是的沒錯,任何東西都是并行的,除了你的代碼。為了理解它,把你的代碼想像成是國王,然后node是它的仆從軍隊。

新的一天以仆從叫醒國王并且問他是否需要什么而開始了。國王給了這個仆從一個任務列表,然后回去繼續(xù)睡覺去了(汗)。這個仆從把這些任務分配給了他的同僚,然后他們開始工作。

當一個仆從完成了一個任務,他會在國王領地外邊排成一條線來匯報。國王一次讓一個仆從進來,然后聽取他的報告。有時候國王會在仆從出去的時候給仆從更多的任務。

生活是美好的,因為國王的仆從并行的執(zhí)行他的任務,但是一次只報告一個結果,所以國王可以專注。*

“那是異想天開,但是你能結束這個愚蠢的比喻并且用geek的方式告訴我嗎?”

當然。一個簡單的node程序看起來可能是這樣的:

var fs = require("fs")
  , sys = require("sys");

fs.readFile("treasure-chamber-report.txt", function(report) {
  sys.puts("oh, look at all my money: "+report);
});

fs.writeFile("letter-to-princess.txt", "...", function() {
  sys.puts("can"t wait to hear back from her!");
});

你的代碼給了node兩個任務用來讀寫一個文件,然后就休眠了。當node完成了一個任務,跟它對應的回調就會被觸發(fā)。但是在同一時間只能有一個回調觸發(fā)。在那個回調完成了執(zhí)行之前,所有其他的回調不得不排隊等待。進一步說,對于回調觸發(fā)的順序是無法保證的。

“所以我不必擔心代碼在同一時間訪問同一個數(shù)據(jù)結構?”

你理解了!這就是JavaScript的單進程/事件循環(huán)設計的全部美之所在。

“非常好,但是為什么我應該用它?”

一個原因是效率。在一個web應用中,你主要的響應時間消耗通常是執(zhí)行數(shù)據(jù)庫查詢的時間之和。通過node,你可以一次執(zhí)行你所有的查詢,把響應時間減少為執(zhí)行最慢查詢所花費的時間。

另一個原因是JavaScript。你可以使用node來在瀏覽器和你的后端之間共享代碼。JavaScript也正在變成一個真的通用語言。不管過去你用的是python,ruby,java,php或者其他語言,你都可能用過一些JS,對嗎?

最后一個原因是原始速度。V8時刻在向成為全球最快的動態(tài)語言解釋器之一而努力。我想不到任何其他語言在速度上有像如今的JavaScript一樣有如此突飛猛進的提升。進一步說,node的I/O能力非常輕量級,可以使你可以盡可能的完全利用你系統(tǒng)完全的I/O能力。

“所以你在說我應該從現(xiàn)在起用node來寫我所有的應用?”

是和不是。一旦你開始掄node這個錘子,那么顯然一切開始看起來都像一個釘子。但是如果你當前的工作有一個期限,你可以通過以下來決定:

是否低響應時間/高并發(fā)重要?Node真的很擅長它。

項目有多大?小項目問題不大。大項目應該小心的評估(可用的庫,修復一個bug所需的資源或者two upstream等等)。

“node能運行在Windows上嗎?”

不行。如果你使用的是windows,你需要運行一個Linux虛擬機(我推薦VirtualBox)。node對Windows的支持在計劃中了,但是接下來的幾個月不要屏住呼吸除非你想對port提供幫助。(譯者:現(xiàn)在node可以完美的運行在Windows上)

“我能在node中訪問DOM嗎?”

好問題!不行,DOM是瀏覽器中的東東,并且node的JS引擎(V8)幸好跟那些混亂的東西是完全分離的。不過,有人在以node模塊的形式來實現(xiàn)DOM,可能帶來令人興奮的可能性比如對客戶端代碼進行單元測試。

“難道事件驅動編程不是真的非常難嗎?”

這取決于你。如果你已經(jīng)學過如何在瀏覽器中擺弄AJAX調用和用戶事件,那么使用node不會是一個問題。

同時,測試驅動開發(fā)可以真正的幫助你以一個可維護的設計做為開始。

“誰在用它?”

在node wiki(滾動到"Companies using Node")有一個小的/不全的列表。Yahoo正在為YUI對node進行實驗,Plurk正在使用它處理大規(guī)模的comet,并且Paul Bakaus(由于jQuery UI而出名)正在創(chuàng)建一個令人興奮的游戲引擎,其中后端使用了一些node代碼。Joyent已經(jīng)雇傭了Ryan Dahl(node作者)并且大力資助開發(fā)。

對了,Heroku也剛剛聲明了支持對node.js的托管。

“我能去哪里學更多?”

Tim Caswell正在運作優(yōu)秀的How To Node博客。在twitter上Follow #nodejs。訂閱郵件列表。然后去IRC頻道逛逛,#node.js(是的,名字中包含這個點)。我們在那的劃艇分數(shù)快達到200了:)。

我也將會繼續(xù)在debuggable.com這里寫文章。

當前就寫這么多了。如果你有其他問題歡迎留言。

--注解:

*: 這個比喻顯然是太簡單了,但是在現(xiàn)實之中找到一個與非阻塞概念相對應的對照物很難。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/77930.html

相關文章

  • 理解Node.js(譯文)

    摘要:譯者覺得作者的比喻很適合初學者理解,特此翻譯。進一步說,回調觸發(fā)的順序是不能被保證的。所以我不必擔心代碼在同一時間訪問同一個數(shù)據(jù)結構你確實理解了,這就是的單進程事件循環(huán)設計美麗的地方。 前言 總括 :這篇文章十分生動形象的的介紹了Node,滿足了讀者想去了解Node的需求。作者是Node的第一批貢獻者之一,德國前端大神。譯者覺得作者的比喻很適合初學者理解Node,特此翻譯。 譯者 :原...

    SegmentFault 評論0 收藏0
  • 譯文Node.js垃圾回收機制-基礎

    摘要:正好最近在學習的各種實現(xiàn)原理,在這里斗膽翻譯一篇垃圾回收機制原文鏈接。自動管理的機制中,通常都會包含垃圾回收機制。二垃圾回收機制的概念垃圾回收,是一種自動管理應用程序所占內(nèi)存的機制,簡稱方便起見,本文均采用此簡寫。 最近關注了一個國外技術博客RisingStack里面有很多高質量,且對新手也很friendly的文章。正好最近在學習Node.js的各種實現(xiàn)原理,在這里斗膽翻譯一篇Node...

    haobowd 評論0 收藏0
  • 譯文Node.js官方文檔(前言&目錄)

    摘要:畢竟官方文檔才是未經(jīng)提煉的純技術點,讀書不能只讀二手書。目前網(wǎng)上能找到的中文文檔基本都是基于的,但截至此文發(fā)布,最新的穩(wěn)定版都已經(jīng)是了。翻譯過程中主要參考官方英文文檔,以及極客學院的官方文檔中文翻譯。 前言 相信很多開發(fā)者和我一樣,在學習一門技術的時候,通過網(wǎng)上的各種教程和視頻入門之后會發(fā)現(xiàn)自己遇到一個上升瓶頸。造成這個瓶頸的很大一部分原因,我認為是進階教程的知識點過于分散,同時高質量...

    tinna 評論0 收藏0
  • 譯文Node.js官方文檔(Part 2 用法與示例)

    摘要:用法具體的參數(shù)及腳本運行方式,請參考命令行工具章節(jié)。示例用寫的一個返回的服務器示例要運行此服務器,將上面所示代碼放入文件,并用執(zhí)行它本文檔中所有的示例均可以類似方式運行。全文目錄請查看全文目錄 用法 node [options] [v8 options] [script.js | -e script] [arguments] 具體的option參數(shù)及腳本運行方式,請參考命令行工具章節(jié)。...

    tianyu 評論0 收藏0
  • 譯文Node.js v7 Nightly版本的async/await小實踐

    摘要:正文的實踐幾個月前,引擎加入了特性。注意目前特性只在非穩(wěn)定版本的中才有。暫時建議不要用于生產(chǎn)環(huán)境。意思是它能以非阻塞的方式暫定代碼的執(zhí)行,以等待上一個結果返回。在此之前,還它只能通過轉譯器來實現(xiàn)。 來自新手向國外技術博客RisingStack的又一篇Node.js相關技術文章,原文請看此。 正文 Node.js v7的async/await實踐 幾個月前,JavaScript引擎V8加...

    Little_XM 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<