特性 | nodejs | java | golang |
最早发布时间 | 2009 | 1996 | 2012 |
流行web框架 | express/Sequelize | springboot/springcloud | gin/gorm |
多线程 | v10.5.0后支持 | 原生支持 | 原生支持 |
协程 | 支持 | 暂不支持 | 支持 |
面向对象 | 原生不支持,可模拟,不支持多态 | 原生支持 | 面向过程,不支持继承 |
异常处理 | 不够完善,容易产生性能问题 | 稳定成熟 | 较完善 |
标准库 | 高速发展中 | 稳定完善 | 完善 |
异步IO | 语言级别支持 | 1.7后支持NIO | 协程支持 |
健壮性 | 单线程单进程模式,通过负载均衡、自杀重启提升能力 | 支持多线程,支持多核,更加灵活可靠 | 支持多线程,支持多核,更加灵活可靠 |
注解、反射、泛型 | 无 | 原生支持 | 支持反射,泛型尚未成熟 |
扩展性 | C/C++编写的逻辑扩展 | 支持C/C++/及其他可被JVM执行语言编写的逻辑扩展 | 支持跨各种语言调用 |
垃圾回收 | 分代回收 | 普遍分代回收,有多种垃圾回收算法可供选择 | 标记清除 |
必备知识体系 | 浏览器平台+nodejs | linux、数据库、网络、高并发、系统监控 | linux、数据库、网络、高并发、系统监控 |
杀手锏 | IO密集场景表现优秀 | 生态圈强大活跃 | 与k8s是兼容性好、可编译成二进制原生部署 |
架构选型建议:
统治级别领域,任何老板盲选的最优选择,特殊需求才选择其他
大数据、AI :jvm类语言、python人脉广泛
算法、内核级别:c/c++几十年沉淀,新挑战者力量尚且不足
灵活领域,需要综合考虑人力成本与硬件成本
中小企业:nodeJs容易培养全栈人才,资源利用率高,节省机器,人力成本与硬件成本有极大诱惑力,
大厂:大型项目中NodeJs健壮性尚且不足以挑战传统Java、golang等强类型语言,但胜在追求性能极致,适用于某些高并发/高性能领域,如美团网的订单吹,知乎“站内信”等
总体而言越接近基础设施层强类型语言越有优势,反之越接近人类具体使用场景则弱类型逐渐被喜爱,毕竟相同结果少写点代码谁都喜欢。
java由于出生早,当下流行android、hadoop等各种领域占据很大比例,短时间不会被后来者替代
当下风口上的云原生主要依托的k8s为golang构建,生态内go也就具备了天然优势。
NodeJs属于业界新秀,javascript使用人员数量极为庞大,极致的高性能也令同行黯然失色,不容小觑。