Node简述

252 阅读2分钟

Node历程

09年rd基于V8构建轻量级web服务器和一整套库。

Node命名与来源

1. 为什么是JS

构建高性能web服务器的关键: 事件驱动异步IO,JS天然支持。

2. 为什么叫Node

Node成为了构建网络应用的基础框架,可以以其为基础构建应用。每个Node作为单线程单进程,为构建大型分布式应用提供了基础设施。每个Node进程作为大型网络应用的一个节点,所以取名Node。

Node给JS的意义

JS长期被限制在浏览器沙盒中,下面是JS在浏览器中的架构模型:

WebKit引擎负责UI布局相关。然后是Node的架构模型:

JS在浏览器环境内的能力受浏览器限制,在Node中,除了UI相关的能力,JS可以做很多别的事,比如任意修改文件。
JS在浏览器中通过事件驱动来服务与界面交互,在Node中则是服务于IO。

Node的特点

1. 异步IO

与JS在浏览器端发起ajax请求类似,Node在异步操作时对结果值的获取符合同样的“dont call me,i'll call you”的特点。Node在底层封装了很多异步IO操作,实现了并行IO。

经典异步调用

2. 事件与回调函数

  • Node配合异步IO,会将一些事件点暴露给业务逻辑。
  • 回调函数作为第一等公民,是最好的接收异步操作返回数据的方式。

3. 单线程

JS的单线程特性意味着不用面临多线程编程的状态同步和死锁问题,但是存在一些缺点:

  • 大计算的阻塞
  • 无法利用多核CPU
  • 程序错误即中止,需要考验代码的健壮性

浏览器端JS阻塞会引起渲染和响应中断的问题,Node端JS阻塞会引起无法继续调用异步IO或执行已完成异步IO操作的回调。 关于这几点缺点,类似于JS在浏览器环境下有web worker,Node环境下有child_process来利用多核CPU分解计算。