何为 Node?
Node.js 是一个 JavaScript 运行平台,其显著特征是它的异步和事件驱动机制,以及小巧精悍的标准库。
Node 简介
Node 特点
Node 和 JavaScript 的优势之一是它们的单线程模型。这样代码控制逻辑很清晰、明了。但是 Node 采用了事件轮询、异步 API、非阻塞 I/ O 三种技术来解决单线程阻塞(等待的问题)。
Node 与 V8
Node 的动力源自 V8 JavaScript 引擎,是由服务于 Google Chrome 的 Chromium 项目组开发的。V8 的一个值得称道的特性是它会被 JavaScript 直接编译为机器码,另外它还有一些代码优化特性,所以 Node 才能这么快。Node 的另一个本地部件 libuv,它是负责 处理 I/O 的。V8 负责 JavaScript 代码的解释和执行。用 C++ 绑定层可将 libuv 和 V8 结合起来。如图:
V8 会为 Node 提供一些额外的特性支持,查看 Node 特性支持可以通过一下代码查看(linux、macOS):
node --v8-options | grep "in progress"
安装 Node 很简单,去官网或者使用一些包管理工具都可以快速的安装 Node 程序。目前支持大部分操作系统,也可以通过源码进行安装。
Node 自带的工具
Node 自带了一个包管理工具(npm)也是命令行工具,可以用来安装应用所需依赖或者发布自己的工具包,还提供了一些核心模块,比如:文件系统、网络、调试器等,赋予 JavaScript 读写磁盘、访问 Http,以及在命令行单步调试程序的能力。
目前主流的 Node 程序有三种
- Web 应用程序,因为 Node 是服务器端的 JavaScript 平台,所以 Web 应用程序是最常见的了。
- 命令行工具和后台程序
- 桌面程序(Electron)
Node 编程基础
Node 通过 require(*) 来引入模块,通过 exports 和 module.exports 来导出模块。根据需要将功能通过 exports 或 module.exports 组织成模块,可以规避程序脚本一直增长所产生的弊端。
Node 可以通过 node_modules 重用模块,搜索规则如下:
使用异步编程技术
因为 Node 是单线程的,所以,开发编程中会遇到大量的异步编程技术,在 Node 中流行的响应逻辑管理方式有两种:回调、事件监听(eg:EventEmitter)。其中回调(callback)用来最为频繁(所以好多祖传代码各种嵌套,好在 Node 开发中开发了大量的优秀工具来优化异步回调,ES 2015 的一些新特性也支持将异步逻辑以同步化的编程方式展现,用来规避大量祖传回调嵌套的问题(eg: genorator、aysnc、Promise 等)。
异步开发中,时常会有执行顺序而导致逻辑或者代码执行不符合预期,可以通过一些技术手段去规避(原因是 js 中没有块级作用域导致的,现有的 let、const 变量声明关键字一定程序上规避了这个问题,通过将变量提升到暂时性死区)。
异步逻辑顺序华主要有两种方式:串行和并行,目前 Node 社区有比较好的流程控制工具,诸如:Async、Step、Seq 等等。