Skip to content
导航

Node.js 简介

Node.js 是一个开源、跨平台的 JavaScript 运行时环境,它有以下特点:

  • 单线程
    Node.js 应用在单个进程、单个线程中运行,无需为每个请求创建新线程。但也可以通过child_progress模块创建子进程,worker_threads模块创建子线程。
  • 非阻塞
    Node.js 提供的标准库通常是非阻塞I/O的。运行的JS代码是同步的,可能因为计算量大造成性能问题,但这是执行JS而不是等待非JS操作,因此不认为是阻塞。

V8 引擎

Node.js 的 JavaScript 引擎是V8,同 Chrome 浏览器,负责解析和执行JavaScript代码。浏览器则额外提供了 DOM、其他Web API。V8 是用 C++ 编写的,可以在Mac,Windows,Linux等系统上运行。

JavaScript 被认为是一种解释型语言(类似的有Python、Shell),可以在运行时逐条翻译为机器语言。

随着 JS 的代码量级从早期的几十行,增长到现在多达数十万行,现代 JS 引擎不再只是解释 JS,而是编译它。JavaScript 由 V8 在内部即时 (JIT)编译以加快运行速度。虽然这样做会降低 JS 的启动速度,但编译完成后的 JS 运行速度比解释型语言性能更高。

异步编程

编程语言一般是同步的,一些语言提供库来管理异步。

JavaScript 默认是同步的。在浏览器中,JavaScript通过浏览器的事件驱动回调函数,实现异步。在Node.js中,Node.js提供非阻塞I/O的标准库来实现异步。

较旧的Node.js版本中,标准库提供的是回调函数来执行异步代码,而在较新的版本(10+)中,标准库支持了Promise风格用法。

包管理器

包管理器提供了简易的方式去加载社区丰富的开源内容,Node.js 与 JavaScript 互相成就,为JS带来浏览器外开发能力的同时,在2022年9月成为最大的单一语言代码存储库。

Node.js 安装后,除了提供node CLI命令运行JS,还提供npm CLI命令操作包管理器。也可以安装 npm 的替代品 yarnpnpm

能力

Node.js 的作用:

  • 网络应用服务器,快速实现HTTP等类型的网络服务
  • 操作文件系统、数据库

常见用途:

  • SSR、接口服务(如GraphQL)
  • 脚手架、测试框架
  • 命令行工具(如 nvm、nrm)

可能是由于JS存在性能、计算精度问题,Node.js适用场景有限。

为了解决这些问题,Node.js可以通过 node-gyp 库编译C++模块来实现扩展,也可以使用全局对象 WebAssembly 来加载wasm文件。

参考资料