前言:
身边越来越多的同事谈论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的流程再次将这门语言推到了巅峰,架构选型永远是个重点选项。