原文:http://www.hostingadvice.com/blog/nodejs-vs-golang/
最近有人批评了在高性能,网络化的应用环境中使用Node.js的价值,一些开发者已经转移到Go语言。
还有几个知名的企业转而使用Go,超越了语言的创造者,Google。 Dropbox已经转移到Go,声称性能得到显著的提高,Docker虚拟化系统的开发人员也在使用Go。
需要注意的是,Node.js仍然被更广泛的受众使用,更多的模块,更容易使用,并且不会随时随地。 此外,如果您正在制作Web应用程序,那么您可能选择Node.js语言,而Go目前更多的用来作为一个脚本语言,当您需要优先考虑并发和速度的时候。
在本文中,我们将从开发人员的角度来看一下Node.js和Go之间的差异,以揭示每个环境的优缺点。
Node.js
Node.js(及其最近的fork,IO.js)是一个日益普及的平台,建立在一个基于JavaScript的快速运行时:V8。
V8是由Google创建的JS虚拟机,旨在构建可扩展的联网应用程序。 它将JavaScript代码编译为本地机器代码,使用一些复杂的优化。 V8也对JS对象进行内存分配和垃圾收集。
虽然动态类型语言的这些动态优化为开发人员提供了很大的灵活性,但它们有时会带来一些性能成本。
由于Node.js是用JavaScript编写的,它继承了该语言的大部分属性。 这些JavaScript现在非常受欢迎,ECMAScript标准开发主要以进化方式完成,而不是革命性的方式。
这对JavaScript和Node开发有一些重要的副作用:
- 一些JavaScript语言缺陷难以解决,在不破坏向后兼容性的情况下。尽管最严重的问题正在被修复。
- 有用但激进的JS语言功能可能无法实现,也可能仅作为附加语法进行“修补”。与将功能整合到设计中的语言相比,这可能会导致语言设计更加混乱。一个很好的例子就是使用JS进行并发计算。并发计算的JS最佳实践从并发API(使用基于event的回调)到promises的发展,到即将到来的 async generators 支持。这些日子回调地狱仍然是许多Node.js应用程序的严重问题;然而这会导致更少的可读代码,更慢的开发,甚至更多的错误。
所有这些意味着JavaScript语言演变得相当缓慢(有些也会说得不好),即使知道来自其他语言的好概念也能工作得更好。
Node.js还有一个庞大的社区和大量的应用正在为它编写, 所以我们不想吓唬你,虽然在一小部分情况下会有一些陷阱;根据绝大多数开发者的意见, 这仍是一个很好的工作平台。
Golang
Go,也被称为“Golang”,是由Google在2007年开始编译的面向系统的编程语言。Go可以被认为是C语言和C ++语言等相当保守的语言演变的结果。
Go改善这些语言的一些疑虑:
- 依赖管理不善
- 繁琐的类型系统
- 内存管理困难
- 缺乏并行计算支持
- 缺乏多核支持
Go比C或C ++更具表现力,可以减少所需的代码量。
与C或C ++相比,Go可以更容易地编写稳健的网络应用程序,而不会牺牲性能方面的太多。 高性能在很大程度上是由于静态编译的Go代码。 编译器可以预先执行所有的代码检查工作,而不是运行时完成的动态JS编译器工作,很多优化是可能的。
总结
选择Node.js或Go取决于您最擅长的开发套件类型以及网络服务需要扩展的规模。
Go现在可能还没有像Node.js一样拥有所有的社区包或分享, 但其语法上更干净的并发模型, 更好的原始 cpu 和内存绑定的性能, 以及它的能力, 以更好的并发负载可以为某些网络应用程序类型奠定更好的基础。
如果您需要某些尚未适用于Go的Node.js软件包,并且在Go中重新实现将有困难或昂贵,那么Node可能是更明智的选择。
如果您希望在Ubuntu / Linux系统上安装Go,请查看我们安装Go的指南。然后访问GoByExample和在线Go book,了解更多精彩教程。
如果您想给Node.js一个镜头,请务必查看我们的 安装Node.js指南,以及免费的Node.js托管服务列表。然后前往NodeSchool.io了解一些有关Node.js编程的精彩教程。