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