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分解计算。