文章翻譯:王韜懿
發(fā)表時(shí)間:2015 年 7 月 03 日
原文作者:Sachin FromDev
文章分類:后端開(kāi)發(fā)
對(duì)于服務(wù)器端開(kāi)發(fā)語(yǔ)言來(lái)說(shuō),Java 和 PHP 可能是現(xiàn)在的企業(yè)用的最多的了。但是,Node.js 作為一門(mén) Javascript 里面的服務(wù)器端語(yǔ)言在高并發(fā)方面的表現(xiàn)卻不亞于用 Java 開(kāi)發(fā)的企業(yè)級(jí)應(yīng)用。國(guó)內(nèi)國(guó)外的一些大型公司都逐漸的在將自己的應(yīng)用使用 Node 構(gòu)建,淘寶里面的一些模塊就是很好的例子。本文將要介紹 Node.js 的一些基礎(chǔ)知識(shí)和應(yīng)用場(chǎng)景。
想一下為什么 Node.js 越來(lái)越受歡迎了?什么時(shí)候使用 Node.js ?這篇文章有你想要的所有關(guān)于 Node.js 框架和最好的在社區(qū)實(shí)踐的一切細(xì)節(jié)。
Node.js 通過(guò)用單線程取代多線程,事件驅(qū)動(dòng) I/O 來(lái)解決了高并發(fā),取代了 Java 平臺(tái)的標(biāo)準(zhǔn)。在這篇文章中,我們將討論 Node.js 并且會(huì)闡明為什么事件驅(qū)動(dòng)并發(fā)會(huì)如此的受歡迎,甚至包括一些核心的 Java 開(kāi)發(fā)者。
我們等會(huì)兒會(huì)向你介紹一些 Node.js 最好的實(shí)踐來(lái)讓你使用 Node’s Express 框架,Mongolian DeadBeef 和 MongoDB 來(lái)做一個(gè)即時(shí)的,可擴(kuò)展的,并且持久化的 web 應(yīng)用。
在過(guò)去的一些年里面, JavaScript 已經(jīng)成為了一個(gè)“黑暗騎士”,有點(diǎn)像是 web 開(kāi)發(fā)的傳奇。但是事實(shí)卻讓很多過(guò)去說(shuō) JavaScript 是一門(mén) “玩具語(yǔ)言” 的 web 應(yīng)用開(kāi)發(fā)者感到驚訝。
雖然有很多知名的語(yǔ)言,但是 JavaScript 作為標(biāo)準(zhǔn)的,瀏覽器中的腳本語(yǔ)言卻讓它保持主流地位。對(duì)于網(wǎng)站客戶端的開(kāi)發(fā),它可是全球用得最廣泛的語(yǔ)言。
JavaScript 額外的在服務(wù)端有一席之地,并且這方面正在發(fā)展。雖然之前 JavaScript 在服務(wù)端有一些企圖,但是卻沒(méi)有一個(gè)像 Node.js 或者 Node 這樣吸人眼球。
Node.js 是一門(mén)開(kāi)源的,跨平臺(tái)開(kāi)發(fā)的服務(wù)器端和網(wǎng)絡(luò)應(yīng)用。 Node.js 應(yīng)用使用 JavaScript 開(kāi)發(fā)的,并且這些應(yīng)用可以在 OS X, Microsoft Windows, Linux, FreeBSD, NonStop 和 IBM 的 Node.js 運(yùn)行環(huán)境里面。
為了幫助開(kāi)發(fā)者構(gòu)建適應(yīng)性強(qiáng)的系統(tǒng), Node 是一個(gè)為開(kāi)發(fā)者打開(kāi)了一個(gè)全興領(lǐng)域的用 JavaScript 寫(xiě)的服務(wù)器端開(kāi)發(fā)環(huán)境。對(duì)于一些 Java 開(kāi)發(fā)者來(lái)說(shuō),Node 最大的好處就是它的簡(jiǎn)單的可以解決程序高并發(fā)問(wèn)題的方法。
雖然 Java 平臺(tái)持續(xù)的開(kāi)發(fā)它的解決高并發(fā)的方式(極大的在 Java 7 和 Java 8里面得到了提高),但是重要的事實(shí)就是它滿足了一個(gè)特殊的需求,并且很多 JavaScript 開(kāi)發(fā)者都在投入它的懷抱。
就像客戶端的 JavaScript 腳本,在 Node 環(huán)境下面的服務(wù)器端腳本在工作上是如此的棒,并且它工作在很多 Java 開(kāi)發(fā)者工作的領(lǐng)域。
在這篇文章中,我們首先會(huì)以一個(gè)是什么讓 Node 如此杰出的結(jié)構(gòu)化的大綱開(kāi)始,在那之后,我們會(huì)展示可以迅速開(kāi)發(fā)一個(gè)可擴(kuò)展的 web 應(yīng)用的行業(yè)標(biāo)準(zhǔn),這個(gè)行業(yè)標(biāo)準(zhǔn)影響了 MongoDB 的信息產(chǎn)業(yè)。作為讀者,你可以發(fā)現(xiàn) Node 是如此有趣,并且開(kāi)發(fā)一個(gè)可工作的 web 應(yīng)用需要多少時(shí)間。
所有的科技巨頭熱愛(ài) Node.js 有很多原因。越來(lái)越多的應(yīng)用正在用 Node.js 開(kāi)發(fā),并且正在被行業(yè)所采納。這里有一些明顯的 Node.js 流行的原因。
易于學(xué)習(xí)
Node.js 是一個(gè)非常容易學(xué)習(xí)的環(huán)境。它是基于 JavaScript 構(gòu)建的,因此開(kāi)發(fā)者主要集中在學(xué)習(xí) JavaScript 編程上面。
很多 JavaScript 開(kāi)發(fā)者可以簡(jiǎn)單的進(jìn)行自學(xué)。與此同時(shí),這里有很多為初學(xué)者準(zhǔn)備的好的 Node.js 圖書(shū)。
對(duì)于那些不懂 JavaScript 的可以在 JavaScript 教程 免費(fèi)學(xué)到。初學(xué)者可以參考 好的 JavaScript 圖書(shū)。
Node.js 支持跨平臺(tái)開(kāi)發(fā)
Node.js 可以在主流操作系統(tǒng)上運(yùn)行,包括 Linux, Windows 和 Mac OSX。一個(gè)簡(jiǎn)單的安裝就可以適應(yīng)所有環(huán)境。
Node.js 的可測(cè)量性和高性能
一個(gè)快速的采納 Node.js 的主要的原因就是因?yàn)樗谏a(chǎn)系統(tǒng)上面的性能。很多高流量的系統(tǒng)就是用 Node.js 寫(xiě)的。像 Paypal 和 Walmart 這樣的公司已經(jīng)宣稱他們的 Node.js 應(yīng)用在高流量的時(shí)候的表現(xiàn)非常好。
Node 的事件驅(qū)動(dòng)并發(fā)
Node 是一個(gè)基于谷歌的 V8 JavaScript 引擎的事件驅(qū)動(dòng)I/O環(huán)境。 在運(yùn)行之前 Google V8 真的與 JavaScript 放進(jìn)本地機(jī)器碼,帶來(lái)了驚人的快速運(yùn)行時(shí)執(zhí)行 - 一些不適通常與 JavaScript 相關(guān)聯(lián)的。因此,Node 可以讓你迅速的構(gòu)建快速并且支持高并發(fā)的網(wǎng)絡(luò)應(yīng)用。
事件驅(qū)動(dòng) I/O 對(duì)于 Java 開(kāi)發(fā)者來(lái)說(shuō)可能有一些遙遠(yuǎn),但是這不是最新的。不是我們?cè)?Java 里面使用的多線程編程模型,Node 解決高并發(fā)的方式是單線程,只需要額外的事件循環(huán)。這讓 Node 可以無(wú)阻塞或者異步 I/O。在 Node 里面,經(jīng)常阻塞的調(diào)用,比如說(shuō),等待數(shù)據(jù)庫(kù)查詢結(jié)果,不會(huì)發(fā)生。
Node 需要一個(gè)回調(diào),而不是為了完成一個(gè)高耗費(fèi)的任務(wù)。當(dāng)一個(gè)數(shù)據(jù)被返回的時(shí)候,聯(lián)合的回調(diào)會(huì)被非高并發(fā)的調(diào)用。
高并發(fā)會(huì)在 Node 程序里面起作用。如果我需要在 Java 平臺(tái)上面運(yùn)行過(guò)去的數(shù)據(jù),我會(huì)考慮我的決定的復(fù)雜度和延長(zhǎng)的方法 -- 從通常的線程到 Java NIO 里面的刷新的類庫(kù),甚至提高并且重新設(shè)計(jì)的 java.util.concurrent 包。
雖然 Java 可以實(shí)現(xiàn)高并發(fā),但是它在代碼上面非常難理解。Node 的回調(diào)系統(tǒng),是與語(yǔ)言結(jié)合在一起的,你并不需要像 synchronized 這樣特殊的構(gòu)造器來(lái)讓它工作。Node 的并發(fā)模型是驚人的簡(jiǎn)單,這讓更大范圍的開(kāi)發(fā)者可以接觸到它。
更好的能力和保持力
雖然你可以找到成千上萬(wàn)的 Java 開(kāi)發(fā)者,但是 Node.js 的開(kāi)發(fā)者并不匱乏。Node.js 在最好的自由職業(yè)者網(wǎng)站上面有很多。
更強(qiáng)大的生產(chǎn)力
因?yàn)?Node.js 是既用于服務(wù)器端和客戶端的開(kāi)發(fā),它的開(kāi)發(fā)也更加快速和穩(wěn)定。一個(gè) JavaScript 開(kāi)發(fā)者可以理解并且從頭到尾的開(kāi)發(fā)一個(gè)應(yīng)用,而不需要擔(dān)心服務(wù)端與客戶端之間的復(fù)雜的一層關(guān)系。 一個(gè)基于 Java 的應(yīng)用可能仍然需要一個(gè) JavaScript 開(kāi)發(fā)者去豐富用戶界面,并且從更深層次上說(shuō)可能需要 JavaScript 開(kāi)發(fā)者和 Java 開(kāi)發(fā)者之間的溝通交流。
活躍的社區(qū)
Node.js 社區(qū)非?;钴S,并且快速幫助在流行的論壇和討論組里面總是可以獲到。Stackoverflow 有超過(guò) 80K 的問(wèn)題,并且很少有問(wèn)題是沒(méi)有被回答的。
很多有用的開(kāi)發(fā)者工具
因?yàn)?Node.js 主要是 JavaScript ,因此為它找開(kāi)發(fā)工具非常簡(jiǎn)單。有很多支持 JavaScript 的 IDE 和開(kāi)發(fā)者工具可以用來(lái)寫(xiě) Node.js。 JavaScript 可以被瀏覽器解析,因此很多基于云服務(wù)的 JavaScript IDE 可以用來(lái)在線開(kāi)發(fā)和調(diào)試 Node.js。
簡(jiǎn)單的 Node.js 主機(jī)
雖然你可以選擇一個(gè)專注的主機(jī)服務(wù)商并且可以簡(jiǎn)單的搭建你自己的 Node.js 環(huán)境,但是有很多你可以簡(jiǎn)單的安裝 Node.js 環(huán)境的主機(jī)提供商。這些提供商已經(jīng)有一個(gè)基本的為 Node.js 應(yīng)用的安裝步驟,這可以讓你快速開(kāi)始你的業(yè)務(wù)。 這里有一個(gè)支持 Node.js 的主機(jī)提供商列表。
Java 平臺(tái)在大企業(yè)開(kāi)發(fā)里面的高并發(fā)服務(wù)占據(jù)主導(dǎo)地位,這一點(diǎn)有可能不會(huì)改變。像 Netty (和 Gretty)的框架,像 NIO 和 java.util.concurrent 這樣的類庫(kù),已經(jīng)在 JVM 的高并發(fā)部分占據(jù)地位。
關(guān)于 Node 很奇特的一點(diǎn)就是它是一個(gè)專門(mén)為解決同步編程困難的流開(kāi)發(fā)環(huán)境。Node 的事件驅(qū)動(dòng)編程模型告訴你你需要為了同步工作而與其他額外的類庫(kù)打交道,這對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是一件振奮人心的消息。
在很多應(yīng)用場(chǎng)景 Node.js 可以工作得比傳統(tǒng)的服務(wù)器端編程語(yǔ)言要好,比如 Java 或者 PHP。Node.js 主要的好處就是客戶端與服務(wù)器端之間兩端的連接。這讓與服務(wù)器端有很少交互的豐富的客戶端應(yīng)用使用 Node.js 成為一個(gè)流行的選擇。
如果你想創(chuàng)建一個(gè)在頁(yè)面上面有很多種類型的數(shù)據(jù)格式和組件的面板應(yīng)用,Node.js 可能是一個(gè)很好的選擇。一些 Node.js 運(yùn)行的很好的實(shí)用的應(yīng)用如下。
就像其他事物一樣,Node.js 并不是適合解決你的所有的問(wèn)題。下面的一些系統(tǒng)使用 Node.js 可能并不是一個(gè)好的選擇。
Node 的 JavaScript 的語(yǔ)言結(jié)構(gòu)當(dāng)然會(huì)讓你遠(yuǎn)離鍵盤(pán)。只需要一點(diǎn)代碼,你就可以制造一個(gè)快速的,通用的 web 應(yīng)用。
你可以在 Java 平臺(tái)上面做到那一點(diǎn),但是你需要更多行的代碼和額外的類庫(kù)和開(kāi)發(fā)。并且,以防止你在研究其他編程環(huán)境時(shí)被惹怒,請(qǐng)不要這樣以為:你知道一些 JavaScript 的話,Node 就非常簡(jiǎn)單。我敢打賭你會(huì)這樣做。
更多IT技術(shù)干貨: wiki.jikexueyuan.com
加入極客星球翻譯團(tuán)隊(duì): http://wiki.jikexueyuan.com/project/wiki-editors-guidelines/translators.html版權(quán)聲明:
本譯文僅用于學(xué)習(xí)和交流目的。非商業(yè)轉(zhuǎn)載請(qǐng)注明譯者、出處,并保留文章在極客學(xué)院的完整鏈接
商業(yè)合作請(qǐng)聯(lián)系 wiki@jikexueyuan.com
原文地址:http://www.fromdev.com/2015/07/why-node-js-popular.html