前言:身边越来越多的同事都在谈论Nodejs,谈论它的异步IO,事件回调,前后端统一。Nodejs,期望能够使用一种语言来节省成本,快速完成需求开发。和其他项目组的同事谈项目选择Java的时候,他们都笑话他们,不与时俱进干嘛还用Java。并且发现越来越多的前端同仁可以通过Nodejs轻松上手后端功能开发,感受到作为后端开发工程师的压力。本文以新项目为契机,系统地了解了Nodejs的知识体系,总结了所学的Nodejs技术,并与Java相关技术进行了对比,为其他考虑选择两种语言的架构师提供选择决策的依据。为避免争议,本文对所选语言避开推荐,不对未来发展趋势做出预测。语言背景分析:简单比较两种语言,发现博士更擅长有技术深度的事情,计算机专业技术不一定是计算机专业贡献:语言和SDK分析:Nodejs选择javascript语法导致的基本特点其灵活的、面向进程的、单进程单线程执行的实现。不过,引以为豪的是其语言的灵活性,一些面向对象的特性也可以通过逻辑代码来实现,但受限于ECMAScript的开发速度,Nodejs向企业级应用语法的整体转型暂时还是比较缓慢的.Nodejs特有的异步IO事件回调使其更适合服务端编程,其单进程单线程的特性让开发更加简单。得意和社区的活跃语言在高速发展,SDK也在不断发展、稳定和丰富。相比之下,Java是面向对象的,具有面向对象的所有特点。经过20年的发展,它变得更加强大和稳定。与Nodejs相比,Java是一个在各个领域都深耕细作的技术巨头。但是也正因为如此,学习Java的成本要比Nodejs高很多。每一个小的技术方面你都能找到厚厚的书来。面对异步IO事件回调这一新技术,Java也在其新的SDK中提供了与时俱进的支持,相关的Java开源项目也及时跟进。三方开源框架选择:语言选择之后就是框架选择,一个好的框架可以去掉很多不必要的重复工作,让项目轻松获得强大的功能。当然,三方开源框架的引入也带来了相应的学习成本。同样,由于Nodejs框架的开发时间比较短,学习成本也比较低,开发者更容易深入了解底层实现源码。容易出现稳定性和兼容性问题,NPM开发者层次不一,没有很好的审核机制。选择一些模块(尤其是C/C++模块)时需要谨慎。Java三方开源框架大多已经被大量企业广泛使用,成熟稳定。它们提供强大的功能,并且包装和分层良好。开发者付出高昂的学习成本后,更容易被“傻瓜式”使用。就WEB开发系统而言,两者都可以找到很多可以导入的开源框架。产品化分析:就产品化而言,Nodejs虽然在各个方面都做了构建,但与Java相比,还有很多需要完善和发展的地方。例如,系统监控和性能分析不如Java系统完善,受限于进程单线程模式的稳定性和部署不如Java灵活。Nodejs灵活的脚本语言和相对较短的开发时间,使得系统安全性需要经受更多的考验。同时,当前后端代码可以使用js,同时存放在一个开发分支中时,单纯依靠目录区分前后端代码容易造成混淆前后端代码之间,比较不明确。但相信争议和问题都是暂时的,随着Nodejs的快速发展,会逐渐完善和完善。执行引擎分析:V8引擎在浏览器中是众所周知的,这也是Nodejs选择V8这个最快的Javascript执行引擎的原因。但是,另一方面,专为浏览器设计的V8引擎,也严重限制了Nodejs在服务器领域的能力,犹如带着手链脚链高速奔跑。因为V8引擎的创始人和技术都来自于Java虚拟机,所以使用了一些Java虚拟机技术来适配浏览器服务的实现。相对于更加成熟完善的Java虚拟机来说,肯定是相对复杂和笨重的。其他一些对比:其他简单对比如下:完:虽然Nodejs的异步IO和事件回调是杀手能力,其他编程语言也有相应的后续支持,但是Node已经成功统一了前后端-一种语言的端开发,这绝对是无与伦比的,吸引了大批开发者的加入。受益于V8引擎的局限,它的发展依然是包袱重重,但Nodejs还很年轻,发展很快。相信随着IO.js和Node.js的合并,将会有越来越多的开发者共同构建,Node会越来越稳定和成熟。相比之下,Java是编程领域的巨头。经过20年的发展,更加成熟稳定,形成了完整的体系和生态。Android的进程又一次将这门语言推向了巅峰。架构选择始终是一个关键选项。
