Node.js vs Golang翻譯

原文:http://www.hostingadvice.com/blog/nodejs-vs-golang/

最近有人批評(píng)了在高性能,網(wǎng)絡(luò)化的應(yīng)用環(huán)境中使用Node.js的價(jià)值,一些開發(fā)者已經(jīng)轉(zhuǎn)移到Go語(yǔ)言。

還有幾個(gè)知名的企業(yè)轉(zhuǎn)而使用Go,超越了語(yǔ)言的創(chuàng)造者,Google。 Dropbox已經(jīng)轉(zhuǎn)移到Go,聲稱性能得到顯著的提高,Docker虛擬化系統(tǒng)的開發(fā)人員也在使用Go。

需要注意的是,Node.js仍然被更廣泛的受眾使用,更多的模塊,更容易使用,并且不會(huì)隨時(shí)隨地。 此外,如果您正在制作Web應(yīng)用程序,那么您可能選擇Node.js語(yǔ)言,而Go目前更多的用來(lái)作為一個(gè)腳本語(yǔ)言,當(dāng)您需要優(yōu)先考慮并發(fā)和速度的時(shí)候。

在本文中,我們將從開發(fā)人員的角度來(lái)看一下Node.js和Go之間的差異,以揭示每個(gè)環(huán)境的優(yōu)缺點(diǎn)。

Node.js

Node.js(及其最近的fork,IO.js)是一個(gè)日益普及的平臺(tái),建立在一個(gè)基于JavaScript的快速運(yùn)行時(shí):V8。

V8是由Google創(chuàng)建的JS虛擬機(jī),旨在構(gòu)建可擴(kuò)展的聯(lián)網(wǎng)應(yīng)用程序。 它將JavaScript代碼編譯為本地機(jī)器代碼,使用一些復(fù)雜的優(yōu)化。 V8也對(duì)JS對(duì)象進(jìn)行內(nèi)存分配和垃圾收集。

雖然動(dòng)態(tài)類型語(yǔ)言的這些動(dòng)態(tài)優(yōu)化為開發(fā)人員提供了很大的靈活性,但它們有時(shí)會(huì)帶來(lái)一些性能成本。

由于Node.js是用JavaScript編寫的,它繼承了該語(yǔ)言的大部分屬性。 這些JavaScript現(xiàn)在非常受歡迎,ECMAScript標(biāo)準(zhǔn)開發(fā)主要以進(jìn)化方式完成,而不是革命性的方式。

這對(duì)JavaScript和Node開發(fā)有一些重要的副作用:

  • 一些JavaScript語(yǔ)言缺陷難以解決,在不破壞向后兼容性的情況下。盡管最嚴(yán)重的問(wèn)題正在被修復(fù)。
  • 有用但激進(jìn)的JS語(yǔ)言功能可能無(wú)法實(shí)現(xiàn),也可能僅作為附加語(yǔ)法進(jìn)行“修補(bǔ)”。與將功能整合到設(shè)計(jì)中的語(yǔ)言相比,這可能會(huì)導(dǎo)致語(yǔ)言設(shè)計(jì)更加混亂。一個(gè)很好的例子就是使用JS進(jìn)行并發(fā)計(jì)算。并發(fā)計(jì)算的JS最佳實(shí)踐從并發(fā)API(使用基于event的回調(diào))到promises的發(fā)展,到即將到來(lái)的 async generators 支持。這些日子回調(diào)地獄仍然是許多Node.js應(yīng)用程序的嚴(yán)重問(wèn)題;然而這會(huì)導(dǎo)致更少的可讀代碼,更慢的開發(fā),甚至更多的錯(cuò)誤。
    所有這些意味著JavaScript語(yǔ)言演變得相當(dāng)緩慢(有些也會(huì)說(shuō)得不好),即使知道來(lái)自其他語(yǔ)言的好概念也能工作得更好。

Node.js還有一個(gè)龐大的社區(qū)和大量的應(yīng)用正在為它編寫, 所以我們不想嚇唬你,雖然在一小部分情況下會(huì)有一些陷阱;根據(jù)絕大多數(shù)開發(fā)者的意見, 這仍是一個(gè)很好的工作平臺(tái)。

Golang

Go,也被稱為“Golang”,是由Google在2007年開始編譯的面向系統(tǒng)的編程語(yǔ)言。Go可以被認(rèn)為是C語(yǔ)言和C ++語(yǔ)言等相當(dāng)保守的語(yǔ)言演變的結(jié)果。

Go改善這些語(yǔ)言的一些疑慮:

  • 依賴管理不善
  • 繁瑣的類型系統(tǒng)
  • 內(nèi)存管理困難
  • 缺乏并行計(jì)算支持
  • 缺乏多核支持
    Go比C或C ++更具表現(xiàn)力,可以減少所需的代碼量。

與C或C ++相比,Go可以更容易地編寫穩(wěn)健的網(wǎng)絡(luò)應(yīng)用程序,而不會(huì)犧牲性能方面的太多。 高性能在很大程度上是由于靜態(tài)編譯的Go代碼。 編譯器可以預(yù)先執(zhí)行所有的代碼檢查工作,而不是運(yùn)行時(shí)完成的動(dòng)態(tài)JS編譯器工作,很多優(yōu)化是可能的。

goVSnode.png

總結(jié)

選擇Node.js或Go取決于您最擅長(zhǎng)的開發(fā)套件類型以及網(wǎng)絡(luò)服務(wù)需要擴(kuò)展的規(guī)模。

Go現(xiàn)在可能還沒(méi)有像Node.js一樣擁有所有的社區(qū)包或分享, 但其語(yǔ)法上更干凈的并發(fā)模型, 更好的原始 cpu 和內(nèi)存綁定的性能, 以及它的能力, 以更好的并發(fā)負(fù)載可以為某些網(wǎng)絡(luò)應(yīng)用程序類型奠定更好的基礎(chǔ)。

如果您需要某些尚未適用于Go的Node.js軟件包,并且在Go中重新實(shí)現(xiàn)將有困難或昂貴,那么Node可能是更明智的選擇。

如果您希望在Ubuntu / Linux系統(tǒng)上安裝Go,請(qǐng)查看我們安裝Go的指南。然后訪問(wèn)GoByExample和在線Go book,了解更多精彩教程。

如果您想給Node.js一個(gè)鏡頭,請(qǐng)務(wù)必查看我們的 安裝Node.js指南,以及免費(fèi)的Node.js托管服務(wù)列表。然后前往NodeSchool.io了解一些有關(guān)Node.js編程的精彩教程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 最開始的幾年,在應(yīng)用服務(wù)器編程領(lǐng)域,我存在著一個(gè)選擇。那時(shí)候,我已經(jīng)遠(yuǎn)離了C一些時(shí)間,喜歡上JavaScript很...
    Tulayang閱讀 22,917評(píng)論 20 294
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,841評(píng)論 25 708
  • 昨夜的夢(mèng)繁盛得跟高級(jí)繁茂的大榕樹有一拼。想見的人。不想見的人。都以最想念的方式出現(xiàn)。 我踩著表妹那輛破寶馬拖著她去...
    wu楓閱讀 192評(píng)論 0 0
  • 陷入迷茫狀態(tài)的時(shí)候希望有個(gè)人點(diǎn)醒自己,自欺欺人的安于現(xiàn)狀,卻又不甘心的狀態(tài)實(shí)在難受。 像是在一種失重的狀態(tài),漂浮在...
    莫小粒閱讀 826評(píng)論 8 2
  • 寫學(xué)而思寫慣了,于是:很多時(shí)候發(fā)現(xiàn)上彭的課,我這腦力至少聽兩遍才能消化到90%啊!燒腦很過(guò)癮哩!喜歡!嘎嘎...
    阿姬_NLP心智提升閱讀 142評(píng)論 0 0