原文:http://www.hostingadvice.com/blog/nodejs-vs-golang/
最近有人批評了在高性能咱筛,網(wǎng)絡(luò)化的應用環(huán)境中使用Node.js的價值懊直,一些開發(fā)者已經(jīng)轉(zhuǎn)移到Go語言。
還有幾個知名的企業(yè)轉(zhuǎn)而使用Go胳泉,超越了語言的創(chuàng)造者宿亡,Google来氧。 Dropbox已經(jīng)轉(zhuǎn)移到Go舒憾,聲稱性能得到顯著的提高,Docker虛擬化系統(tǒng)的開發(fā)人員也在使用Go居灯。
需要注意的是祭务,Node.js仍然被更廣泛的受眾使用,更多的模塊怪嫌,更容易使用义锥,并且不會隨時隨地。 此外岩灭,如果您正在制作Web應用程序拌倍,那么您可能選擇Node.js語言,而Go目前更多的用來作為一個腳本語言,當您需要優(yōu)先考慮并發(fā)和速度的時候柱恤。
在本文中数初,我們將從開發(fā)人員的角度來看一下Node.js和Go之間的差異,以揭示每個環(huán)境的優(yōu)缺點梗顺。
Node.js
Node.js(及其最近的fork泡孩,IO.js)是一個日益普及的平臺,建立在一個基于JavaScript的快速運行時:V8寺谤。
V8是由Google創(chuàng)建的JS虛擬機仑鸥,旨在構(gòu)建可擴展的聯(lián)網(wǎng)應用程序。 它將JavaScript代碼編譯為本地機器代碼矗漾,使用一些復雜的優(yōu)化锈候。 V8也對JS對象進行內(nèi)存分配和垃圾收集薄料。
雖然動態(tài)類型語言的這些動態(tài)優(yōu)化為開發(fā)人員提供了很大的靈活性敞贡,但它們有時會帶來一些性能成本。
由于Node.js是用JavaScript編寫的摄职,它繼承了該語言的大部分屬性誊役。 這些JavaScript現(xiàn)在非常受歡迎,ECMAScript標準開發(fā)主要以進化方式完成谷市,而不是革命性的方式蛔垢。
這對JavaScript和Node開發(fā)有一些重要的副作用:
- 一些JavaScript語言缺陷難以解決,在不破壞向后兼容性的情況下迫悠。盡管最嚴重的問題正在被修復鹏漆。
- 有用但激進的JS語言功能可能無法實現(xiàn)因块,也可能僅作為附加語法進行“修補”拯坟。與將功能整合到設(shè)計中的語言相比占业,這可能會導致語言設(shè)計更加混亂财异。一個很好的例子就是使用JS進行并發(fā)計算脐帝。并發(fā)計算的JS最佳實踐從并發(fā)API(使用基于event的回調(diào))到promises的發(fā)展拨黔,到即將到來的 async generators 支持逸雹。這些日子回調(diào)地獄仍然是許多Node.js應用程序的嚴重問題;然而這會導致更少的可讀代碼止潘,更慢的開發(fā)搁拙,甚至更多的錯誤秒梳。
所有這些意味著JavaScript語言演變得相當緩慢(有些也會說得不好),即使知道來自其他語言的好概念也能工作得更好箕速。
Node.js還有一個龐大的社區(qū)和大量的應用正在為它編寫, 所以我們不想嚇唬你酪碘,雖然在一小部分情況下會有一些陷阱;根據(jù)絕大多數(shù)開發(fā)者的意見, 這仍是一個很好的工作平臺。
Golang
Go盐茎,也被稱為“Golang”兴垦,是由Google在2007年開始編譯的面向系統(tǒng)的編程語言。Go可以被認為是C語言和C ++語言等相當保守的語言演變的結(jié)果庭呜。
Go改善這些語言的一些疑慮:
- 依賴管理不善
- 繁瑣的類型系統(tǒng)
- 內(nèi)存管理困難
- 缺乏并行計算支持
- 缺乏多核支持
Go比C或C ++更具表現(xiàn)力滑进,可以減少所需的代碼量犀忱。
與C或C ++相比,Go可以更容易地編寫穩(wěn)健的網(wǎng)絡(luò)應用程序扶关,而不會犧牲性能方面的太多阴汇。 高性能在很大程度上是由于靜態(tài)編譯的Go代碼。 編譯器可以預先執(zhí)行所有的代碼檢查工作节槐,而不是運行時完成的動態(tài)JS編譯器工作搀庶,很多優(yōu)化是可能的。
總結(jié)
選擇Node.js或Go取決于您最擅長的開發(fā)套件類型以及網(wǎng)絡(luò)服務(wù)需要擴展的規(guī)模铜异。
Go現(xiàn)在可能還沒有像Node.js一樣擁有所有的社區(qū)包或分享哥倔, 但其語法上更干凈的并發(fā)模型, 更好的原始 cpu 和內(nèi)存綁定的性能, 以及它的能力, 以更好的并發(fā)負載可以為某些網(wǎng)絡(luò)應用程序類型奠定更好的基礎(chǔ)。
如果您需要某些尚未適用于Go的Node.js軟件包揍庄,并且在Go中重新實現(xiàn)將有困難或昂貴咆蒿,那么Node可能是更明智的選擇。
如果您希望在Ubuntu / Linux系統(tǒng)上安裝Go蚂子,請查看我們安裝Go的指南沃测。然后訪問GoByExample和在線Go book,了解更多精彩教程食茎。
如果您想給Node.js一個鏡頭蒂破,請務(wù)必查看我們的 安裝Node.js指南,以及免費的Node.js托管服務(wù)列表别渔。然后前往NodeSchool.io了解一些有關(guān)Node.js編程的精彩教程附迷。