Heim > Fragen und Antworten > Hauptteil
天蓬老师2017-04-17 14:59:42
java强在计算。
node强在IO,并且同是js堆栈,对前端比较友好,而恰好在应用复杂后,前端需要来处理controller了,而Java做好接口服务的职责就好。
另一方面,node作为中间层,以异步的特性,也可以一定程度降低异构系统的差异化成本吧。
迷茫2017-04-17 14:59:42
针对楼主的问题来回答。
1、为什么nodejs为什么只适合做中间层?
不妨换个思维,nodejs去做业务层、数据层会怎样?我用纯nodejs做过应用,发现业务逻辑层太难写了,由于nodejs天生的语言缺陷,复杂的逻辑在碰到一堆callback的时候代码简直没法看,即使用了promise之类的库,也没法完全弥补这个缺陷。大型的网站架构非常注重可维护性,代码可读性低,可维护性自然低了。
2、为什么撼动不了java的地位?
两者的定位本来就不同,为什么要取代呢?两个语言存在不一定要是你死我活的,大型it项目往往是多语言结合的,取长补短,复杂的业务逻辑用java来做,用nodejs处理一些路由映射和参数校验,前端工程师也能部分参与后台工程师的工作,这样项目可扩展性其实更好。
PHPz2017-04-17 14:59:42
node或者说js的特性(单线程,异步,弱类型)决定了它比较适合快速的做简单的东西,你可以不用考虑很多底层的东西,不用考虑数据类型转换,完全不用应用服务器,很快就做出一个应用。但是当应用的体积庞大之后,有一些问题就会暴露出来。这里不说效率,单单是代码的可维护性上,就差java很多。相对来说,java限制比较多,语法比较严格,但这些限制决定了java的程序都会有个风格比较一致的外表,比较容易阅读和维护。
所以一般来说,node不会用来实现比较复杂的业务逻辑。面向对象的语言在控制业务上有很强的能力,比如java。
而且,java流行的时间远比node早,国内很多商业公司,包括银行,他们的业务系统都是java实现的。在这方面,这些公司沉淀了很多经验,也投入了很多资源。即使他们的业务比较适合用node,也是会逐步而不是完全替代java。比如,先用node实现路由和渲染。我现在正在做的项目就是类似这种。
但以上都不是不变的,好的node程序员能写出比烂的java程序员更好的应用,这是毫无疑问的。就像我一位同事所说,java能保证程序的底限,因为它本身就有强制性的诸多原则,而且还有面向对象的诸多知识例如设计模式可供参考。但是node,是没有上限的,同时,也是没有下限的。
迷茫2017-04-17 14:59:42
看看2者的社区,再过3年,这个问题的答案就完全不同了。语言不是关键,关键是人,活跃在社区里的人,人才是创造的根本。其实js这种大家都认为是玩具的语言,没想到能走到这一步。
大家讲道理2017-04-17 14:59:42
nodejs适合做简单业务,比如说基于HTTP API接口,相反如果用它来做个BOSS(Business . Operation Support System,业务内容支撑系统),就显得单薄了些。再比如说一些常驻内存的任务,比如说消息队列类的任务,用nodejs也可以做,但是感觉太别扭,这个时候还是感觉java好一些。
当然nodejs的长处就是开发效率高,对于一些业务场景比较单一的公司是比较适合的。
总之,编程语言的选型和公司业务是挂钩的,具体情况也具体分析。
怪我咯2017-04-17 14:59:42
因为你的问题太简单粗暴:nodejs 是个平台,而 java 是个语言,这两个根本没法直接比较,更不要说中间层这个意思都没表述清楚,那撼动是肯定没戏了;P
我给你一个简单粗暴的回答吧:nodejs 相当于一个没有 IDE 的 ASP.NET,只是单纯轻便快速而已,跟 PHP 之类的相比较还好,Java 就算了,完全不是一种类型的工具。而且 Java 生态更加开放(虽然有 Oracle),总比 Joyent 自己玩好。
PHP中文网2017-04-17 14:59:42
nodejs --> V8 --> C++ 解释 --> 编译机器码
java --> JVM C++ 解释 --> 编译机器码
理论上, 你可以做 java 做的任何事情. 实际上, js 的数字和字符并没有具体设置, 占用的内存更多, 在进行计算的时候, 没有 java 高效. 而 java 虽然做了具体的数字和字符区分, 但是需要虚拟机和垃圾内存检测, 性能上要远低于 C++ 和 C.