特点包括以下几个方面:
- 部署简单方便
- 事件驱动
- 异步编程
- 高校与性能
- 单线程与多线程
Node.js缺点
部署简单方便:
环境配置简单,只需要安装Node.js即可
- 注重约定
- 项目所需要扩展、插件、资源相对独立,不易冲突
事件驱动:根据当前出现的时间,调动资源进行相关的处理。
异步编程:大多数是同步编程,即在一个单元之内代码是从上到下依次执行,上句没有执行完,下一句就不会执行。异步大不相同,当有I/O发生时,无需等待,去执行下一个操作,当I/O完成时用事件来完成。
方式:
- 回调函数
- 事件监听:会使流程变复杂
订阅/发布
高效与性能
单个操作的性能并不由于其它的解决方案
通过优化资源调配和I/O操作来实现高效
其他语言对于IO的处理:PHP:原地等待,可多进程:浪费更多系统资源
C++:多进程,开发成本较高
单线程与多进程:
Google V8 是单线程的,所以Node.js与同样是单进程的。为了更好地利用CPU资源,可以利用进程和多线程:子进程:Node.js的child_process模块
- 多进程:PM2等第三方工具
缺点:
- 大量使用匿名函数,使得抛出的异常不易阅读
- try/catch限于同步代码,使得异常捕获较为复杂
- 单线程:可靠性
- 不适合于CPU密集型场景,eg:视频处理和计算
- 回调代码的阅读问题,影响阅读(基本上是没有根治的方法)