Node与Java

看到很多文章说Node与Java相比有性能高,开发效率高,等等许多优势,那么Java与Node相比有什么优势呢?

阅读 8.4k
6 个回答

纯粹从语言的运行效率,即对一些成熟算法的具体实现来说,node.js在运行时间上可以说毫无优势。

跑在jvm上的java为什么能统治工程界这么多年,干啥都用它?因为它设计完善,实现良好,风险可控,且性能很高。目前唯一的弊端就是内存占用量比脚本语言大很多。目前jvm的网络性能已经超过C++直逼原生C。

说node.js效率高,主要指的是I/O效率高,因为它在底层对所有I/O强制进行异步。

目前互联网的几乎一切性能问题基本上都是I/O问题。

一般单机小网站在流量大到一定程度时,首先扛不住的是数据库,数据库性能差就是因为I/O。

开发效率好像也没什么语言比java低 :-D,这个不用考虑,当工程量大到一定程度,各种语言之间的开发难度都会趋于一致。

首先我想说的是他们是针对不同场景而言的。相对而言比较有优势。具体场景具体用。不存在任何地方Node与Java相比有性能高,开发效率高。

1.毋庸置疑,java用了这么多年。又很多成熟的解决方案,所以比较稳定。
2.java是跨平台,底层一个虚拟机,所以兼容多个平台,效率相对而言低点。比不上ruby等动态语言。

Node巨大的优势是天生异步IO,另外开发异步比较好,不过有个致命的短板就是不支持多线程,所以导致CPU密集型的工作有缺陷;Java相对于新新语言来说很中庸,找不到缺点也找不出优点(貌似最大的优点就是经过很多年的发展,很稳定,宁外有大量的开源框架,社区庞大)。另外对于开发效率,这个我觉得项目大的都一样吧。如果只考虑开发,而不考虑维护的话,java没有优势

首先,JVM在计算密集任务的运行上要比V8快。

node解决的主要是io问题。即node适合处理但进程多用户的问题。而多用户单进程,或者多用户多进程,甚至单用户单进程都不推荐使用node实现。

其次,说到语言层面不谈性能的话,java和node各有优劣。(以下纯属个人见解)

javascript中,你可以选择编程风格。函数式风格?还是面向对象风格?
而java里面就没有这种选择。
所以实际上java是把人圈死了,这样可以防止程序员做傻事,犯一些不必要的错误。这在大型工程中,或者说“现代软件工程”中是很重要的。因为我们实际上没有那么多很少出错,并且能够驾驭函数式编程的程序员,所以我们需要一个框架来约束不那么有能力人,让编程成为体力劳动。就诞生了一个“代码工人”的概念。所以大企业他为什么使用java?一来当然是保险,业界传统。二来就是java的易于掌握和死开发的框架让普通人和天才的开发效率没什么两样。
javascript中函数是“一等公民”,这就导致虽然两门语言名字有一半是一样的,但写出来的东西肯定大不相同。在javascript中,完成工作更加自由。俗话说得好:“中国IT不发达,必须要有lambda”,看过《SICP》的人都知道。而java的流行,一方面是因为炒作,另一方面也确实看过《SICP》的人太少了。

所以,在一个人可以完成的项目中能用node就用node,node写出来都上线了java还在画ER图。
在一大帮人才能完成的项目中能用java就用java,java都开始盈利了node还在debug。

关于开发效率

这个因人而异,主要看你对Java还是Node.js的开发流程更熟悉。

关于性能

这个因项目情况而定,Node.js只在下面特定的情况下有优势。

  1. 项目有大量网络访问流量和磁盘读写。比如:在线流媒体,CDN,互联网服务API,单页互联网应用。这主要归功于Node.js异步IO的特性。当一个IO正在被处理和读写数据库的时候,服务器还可以响应新的IO。而JAVA会阻塞新的IO响应。
  2. 项目使用云端服务器。比如:阿里云服务器ECS免费型。这主要归功于Node.js单线程和事件队列来处理请求。Apache给每个访问请求分配一个线程。当Apache分配8MB给一个用户的时候, Node只给用户分配8KB。
  3. 在线游戏、股票交易、聊天室等。这主要归功于Node.js对于web-socket的完美支持。而且Javascript对callback同步模式具有原生态支持。

Node.js的劣势

主要在安全方面。新技术的诞生都会带来一些安全隐患。但是国外已有大量的程序员在做这方面的研究和弥补。参见Node.js Security Tips

此答案观点引用自 - http://honglio.com/2014/11/22/why-using-node-js/

楼上的前辈们说的都很全面了,我也随口吐槽一下。

性能什么的Node优势在异步IO上可谓得天独厚,加上V8这枚大火箭,Node效率提高了不少。

但是,单线程,硬伤,服务器的优势发挥不出来。而且,异步IO在高并发下是对磁盘IO瓶颈的极大考验。

就我而言,Node的开发成本以及调试成本要比Java高。

Java的优势在于老,老而不死,许多精华的框架也得以光大。连一直诟病的JVM也在历代的优化下直逼C(James Gosling说的)。

Java入门也较容易,安全易用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题