Node.js是一种在浏览器外运行JavaScript的语言,运行时引擎是V8(谷歌浏览器的核心)。也就是说可以用同一个技术栈来编写web前后端的实现代码。此功能在所有语言中应该是独一无二的。Node是一种天生的非阻塞异步io语言。主线程是单线程的,主线程中的操作是同步阻塞的。但是它把所有的异步操作都抛给了IO线程池。主线程通过一定的事件轮询机制与IO线程池进行交互,获取异步数据。这就是node单线程和事件驱动的本质。---具体可以参考NodeJs的Eventloop事件循环机制详解。这个特性使得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的弱点,就能输出更高效的程序。
