likes
comments
collection
share

Node.js 的相对于其他语言的优势分析

作者站长头像
站长
· 阅读数 31

Node.js 是一门在浏览器外运⾏ JavaScript 的语言,运行时引擎是V8(Google Chrome 的内核)。也就是说可以用同一个技术栈去写web前后端的实现代码,这个特性应该是在所有语言中应该是独一无二的

Node 是天生非阻塞式的异步io语言主线程是单线程,主线程中的操作是同步阻塞的。但它把所有需要异步的操作扔给了IO线程池,主线程通过一定的事件轮询机制与IO线程池交互得到异步数据,这便是node单线程和事件驱动的精髓之处了。---具体参见NodeJs 的 Event loop 事件循环机制详解

这个特性使得nodejs使用在高并发互联网、物联网、数据中台更具优势

你可能会问为何具有高并发的优势?要从以下几点说1.数据类型是弱类型的优势,弱类型在传值的时候,是不会去强制转化类型的,弱类型几乎都是json操作。因此在数据传递转换方面是减少了开销的。例如其他强类型语言,在c层需要转换成接受的vo模型,s层还需要转化成do模型,dao层还需要转化成实体模型。这些在运行时都会在内存中消耗性能。尤其是在数据在乘以万倍以上的情况下。

2.nodejs的异步IO实现的方式,是无锁线程模型,用一个进程实现多个线程的模型,WorkerThread间及主线程间不能使用同一块内存。 这种模型在单节点有比较高吞吐量与低延迟特性,比用cassandra线程技术实现模型速度要快。 ---具体参见 Scylla 和 cassandra 技术实现

3.造价成本低,用最小的硬件成本实现了最大化的服务器性能(硬件成本)、如果搭配noSql能对异构数据场景能实现快速迭代(产品变化维护成本)。

劣势方面,以下几点1.正是由于是弱类型,所以对于开发的程序员技术上的要求会更多,需要提供清晰的api文档,和完整单元测试和覆盖率。2.Cpu密集计算的业务场景,如果业务需要做大量的高复杂度计算,那么选多线程模型语言可能更具有优势,nodejs需要用多Worker的方式来提高cpu的利用率。3.在国内高级nodejs开发的人员比较稀有,对于项目来说如果换人了话,那么找人接手的时间成本较高。

总体言之: 对于其他语言中规中矩,nodejs上限会更高,同时下限也很低。开发人员如果对业务清晰,多利用其异步特性,在避开nodejs的弱点,那么就能输出更高效的程序。