Caleb Madrigal是來(lái)自美國(guó)密爾沃基市的一名軟件顧問(wèn)。四年前,他在聽(tīng)說(shuō)“將JavaScript用作服務(wù)器端語(yǔ)言”這樣的說(shuō)法時(shí),認(rèn)為那是一個(gè)荒唐的想法。有那么多服務(wù)器端語(yǔ)言可供選擇,為什么要選JavaScript?這是他當(dāng)時(shí)的想法。但現(xiàn)在,他在當(dāng)前的項(xiàng)目中選用了JavaScript/Node.js。他近日撰文對(duì)自己的這一轉(zhuǎn)變進(jìn)行了解釋。
首先,許多頂級(jí)企業(yè)都使用了Node.js,并且效果非常好,其中包括PayPal、Walmart、Ebay、Groupon和LinkedIn。這些企業(yè)在生產(chǎn)環(huán)境中大量使用了Node.js。Madrigal舉了PayPal的例子。PayPal針對(duì)他們網(wǎng)站上其中一個(gè)流量最大的應(yīng)用,對(duì)比了它的Node.js版本和Java版本,發(fā)現(xiàn)前者在多個(gè)方面優(yōu)于后者,并最終決定由Java切換到JavaScript。InfoQ對(duì)此有過(guò)報(bào)道。
其次,Node.js有一個(gè)很棒的包管理系統(tǒng)NPM。通過(guò)運(yùn)行“npm install 包名”幾乎可以安裝任何包/庫(kù)。另外,通過(guò)package.json文件可以跟蹤依賴關(guān)系。因此,Node.js庫(kù)很容易克隆,運(yùn)行“npm install”可以安裝所有的依賴關(guān)系。
再次,Node.js社區(qū)異;钴S,總是有新的庫(kù)產(chǎn)生。這些庫(kù)非常好用,使JavaScript成為一個(gè)非常高效的平臺(tái)。
然后是Node.js 的REPL(read-evaluate-print loop)命令行。開(kāi)發(fā)人員只需要在終端中輸入“node”,就可以對(duì)Node.js進(jìn)行逐行測(cè)試。
最后,Node.js有一個(gè)很重要的特性:非阻塞函數(shù)。這就是為什么我們會(huì)在Node.js的代碼中看到大量的callbacks和promises。這種設(shè)計(jì)模式給Node.js帶來(lái)了非常優(yōu)異的性能。
此外,Node.js的最大一個(gè)優(yōu)點(diǎn)是:它是JavaScript。任何人都知道JavaScript,所以使用Node.js不需要學(xué)習(xí)一門(mén)新語(yǔ)言。有了它,開(kāi)發(fā)人員可以只使用一種語(yǔ)言,瀏覽器端用JavaScript,服務(wù)器端用Node.js。在使用像MongoDB和CouchDB這樣存儲(chǔ)JSON對(duì)象的文檔數(shù)據(jù)庫(kù)時(shí),這會(huì)極大地簡(jiǎn)化數(shù)據(jù)庫(kù)和用戶界面之間的數(shù)據(jù)傳遞任務(wù)。