百科问答小站 logo
百科问答小站 font logo



Node.js 未来会超越 Java 吗? 第1页

  

user avatar   jianru-lin 网友的相关建议: 
      

这已经不是一种可能性,而是已经在发生了。

最新消息(2017/06/20): Mikeal Rogers: Node.js Will Overtake Java Within a Year - The New Stack

We are now at about 8 million estimated users and still growing at about 100 percent a year. We haven’t passed Java in terms of users yet, but by this time next year at the current growth, we will surpass.
我们(Node.js)目前有约八百万用户,并且每年翻一番。就用户数量而言,Java 还暂时领先,但明年的这个时候——如果增长趋势不变的话——我们将超过 Java。

应该说可喜可贺。当然这是 Mikeal Rogers 的单方面说法,也没有给出数据来源。但我个人基本相信他的说法,并且也认为 Node.js 今年的增长趋势有理由继续维持。

事实上 Node.js 自身依然存在许多问题——就像许多其他竞争对手一样,但是目前在 Web 浪潮的席卷下,它的优势显然更被人们关注,而劣势则尚未在大多数项目中显现。

--------------------------------

注意:下面的内容是我早前写的,关于 Node.js 自身存在的一些问题,已经不符合 2017 年 Node.js 的情况了。我最近会考虑重新修正一下。


你可能看到了 Node.js 的种种优点,但却忽略了它存在的各种问题:

  • 在虚拟机层面 Node.js 基于的 v8 VM 看起来很不错,但和 Java 的 VM 一比,差距甚远。在服务器领域,特别是拥有众多 CPU 和大量内存的环境下,Java 的 VM 几乎是你能在地球上找到的最好的 VM。而 v8 既不能充分利用多 CPU 的性能,也不能将内存充分利用。你唯一能做的事情就是开很多个 Node.js 实例来缓解,但这进一步带来了更多的问题。
  • 在语言层面 JavaScript 本身的设计让你感觉很灵活,因为它基本上是不对类型进行约束的,只有当运行过程中发生了错误才会提示你,毕竟在浏览器环境内,这算不上什么问题;但在一个团队内进行协作时,你会深刻的明白类型系统如果能在运行前就帮你找出那些低级的类型错误问题,将会节省你多少的时间和金钱。特别是别忘了,系统总是在演进的,一个稍微复杂些的业务系统就拥有几十个乃至上百个类型,而类型修改又往往很频繁,想想这个过程里会发生些什么你就明白了。(更新:TypeScript 的出现很大程度解决了这个问题,目前在实践层面而言,至少我们确实知道这个问题能够解决;而且 WebAssembly 在 Node.js 中的落地未来我们甚至可以期待更好的解决方案)
  • 在领域应用层面 Node.js 在 Web 开发领域特别是其中的前端部分已经达到了惊人的繁荣程度,甚至有不少重要系统的后端部分也基于 Node.js 完成。但如果仅凭这些就轻易的认为 Node.js 将会一统全栈打败包括 Java 在内的其它语言是很幼稚的。首先,在一个大型的系统架构中,整个系统是拆分成很多很小的业务系统的,这些系统往往通过消息队列(如 RabbitMQ、Kafka 等等)相互连接起来。也许在小型 Web 站点中,你从来没用过这些。但相信我,在但凡稍微大一些的业务系统中,都是这么干的。这些消息队列服务存在的理由就是将各个子系统解耦。这样一来,你可以在前端部分应用 Node.js 进行快速开发,在业务处理部分使用 Java 来完成。数据分析系统却可以使用 Python/Scala (例如基于 Spark)实现。大型业务系统的架构者们都是些经验丰富的老手,他们知道每个语言/系统的利弊,也知道世界总在变,今天是 Node.js、明天也许就是另一个新秀,因此在整个业务系统中,你要做的根本不是“统一”,反而是“分离”。这样的设计才能够预留出扩展和变更的机会。

总的来看,Node.js 特别适合中小型系统的快速开发,而当系统变得复杂以后,Node.js 更适合充当 Web Gateway 的角色,以及用于前端开发。在这两方面它拥有绝对优势。

综上所述,我相信 Node.js 会拥有大量的用户,但其未来发展也存在天花板,适用领域有局限性。

(2017年补充说明)

个人背景:我从 2011 年底开始一直使用 Node.js 至今,并通读过它大部分模块的源代码,甚至为了阅读它的源码(以及其他 JavaScript 大型项目的源码),我还专门创建了 lambda-view 这一项目:Jianru-Lin/lambda-view。目前我的工作主要集中在 Node.js 和 Erlang 方面。


user avatar   Ivony 网友的相关建议: 
      

要明确定义一下超越是什么意思。

如果是说普及度,那么JavaScript本来就超越了Java,作为浏览器唯一支持语言,JavaScript的代码和应用面都超越了Java。这并不说明JavaScript有多好,只是这是唯一选择而已。

Node.JS是运行在服务器端的JavaScript。事实上Web服务器端一直都存在两个阵营,以Java/C#为代表的工业设计语言和以PHP/RoR为代表的快速开发语言。前者一直牢牢地占据着企业应用开发市场,而后者则普遍认为更适合灵活多变的互联网,Node.JS显然是属于后者的。

但随着Java和.NET平台上的MVC技术推出,Java/Scala和C#/F#也开始蚕食互联网市场。事实上工业设计语言两大阵营,Java和.NET背后庞大的开发者社区和几乎取之不尽用之不竭的开源不开源的公共类型库,一直以来都是一个极大的优势。就长远来看,我更看好工业语言阵营,因为他们的经验和组件更容易积累和复用。

但在今后很长一段时间内,两大阵营仍将同时存在。

由于Node.JS和Java分属不同的阵营,如果要说超越那应该是Node.JS代表的快速开发语言阵营超越了工业设计语言阵营,但两个阵营目前在各自的领域都有很大的护城河,使得这种事情几乎是不可能发生的。

而就语言层面来说,Java和JavaScript都有许多的缺陷和槽点,但JavaScript显然槽点更多。但两者也都有极为广泛的使用人群,短期内也看不出来谁会笑到最后




  

相关话题

  为什么把 Script 标签放在 body 结束标签之后 html 结束标签之前? 
  JavaScript 如果拥有多线程能力会怎样? 
  开发web前端为什么用后端node(npm安装模块和webpack打包方式)? 
  Java 8接口有default method后是不是可以放弃抽象类了? 
  Android 会像 Windows 一样,打败 iOS 吗? 
  如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的? 
  既然Java反射可以访问和修改私有成员变量,那封装成private还有意义么? 
  现在整个 Web 前端是「屎山」吗? 
  为什么前端不能一直做?难道要转行?? 
  java中的==和equals有什么区别? 

前一个讨论
有哪些比较好的机器学习、数据挖掘、计算机视觉的订阅号、微博或者是论坛?
下一个讨论
奇异值的物理意义是什么?





© 2024-06-06 - tinynew.org. All Rights Reserved.
© 2024-06-06 - tinynew.org. 保留所有权利