Node.js 和 V8 的关系是什么?

17 Mar 2025 | 4 分钟阅读

本文将学习 Node.jsV8 之间的关系。在讨论它们的关系之前,我们必须先了解 Node.js 和 V8。

什么是 Node.js?

Node.js 是一个跨平台、后端、JavaScript 运行时环境,它使用 V8 引擎来解释和执行来自 JavaScript 浏览器中的 JavaScript 代码。JavaScript 运行时环境包含运行 JS 代码所需的所有元素。JavaScript 最初是作为一种仅在客户端运行的脚本语言开发的。所有浏览器都了解用于提供 JavaScript 函数的 JavaScript 引擎。例如,Mozilla Firefox 依赖 Spidermonkey,而 Google Chrome 使用 V8 引擎。

JavaScript 引擎是运行 JavaScript 代码的程序,使计算机能够执行任务。Ryan Dahl 创建 Node.js 是因为他看到了 V8 引擎Chrome 中运行得多么出色。他想在浏览器之外的应用程序中使用它。

JavaScript 是一种高级语言,而计算机只懂机器语言,所以我们需要一个解释器将 JavaScript 转换为机器代码。 Node.js 本身不是一种语言,它充当一个允许运行特定程序的运行时。V8 可以被认为是 Node.js 的核心部分。

Node.js 无法在没有 V8 的情况下运行,因为 V8 是该语言的一个基本组成部分。没有 V8 引擎,JavaScript 就无法执行,因为没有引擎来解释它。Chrome V8 引擎还会解释 JavaScript 代码,这是人类可读的,并将其编译成更高效的机器代码。它是一个在多个线程中运行的开源程序。该引擎最初仅用于在 Web 浏览器中执行,但最新版本可以在浏览器之外执行 JS 代码和其他操作,充当服务器。

Node.js 独立于任何浏览器。V8 引擎位于 Node.js 代码内部,为代码添加了额外功能。因此,C++ 代码可以理解比 ECMAScript 标准规定的更多的内容。V8 引擎和 Node.js 是可互操作的。两者结合起来对于开发应用程序都非常有效。因此,V8 引擎是 Node.js 的核心。

V8 JavaScript 引擎简介

V8 是 Google 创建的一个新的高性能 JavaScript 虚拟机,它构建在开源浏览器 Google Chrome 中。它用于提高 Web 应用程序的效率,因为 JavaScript 被翻译成实际的机器代码而不是被解释,这样更快。

V8 是一个基于 C++ 的开源 JavaScript 引擎。它兼容 Linux 发行版、WindowsmacOS。它提供了即时编译、垃圾回收、Promises 和 Arrow 函数等功能。它还支持 WebAssembly,这是一种用于 Web 应用程序执行的低级二进制格式,设计比 JavaScript 语言更快。

V8 使用以下线程

  1. 主线程: FETCH 线程主要用于获取代码,其职责是检查代码是否正在被编译和执行。
  2. 编译线程: 在 V8 的早期版本中,编译任务在两个线程中执行。
  3. Full-Codegen: 这会将 JS 组合成基本且相对缓慢的机器语言。使用 full-codegen,解析后的 JavaScript 会直接转换为机器代码,且不应用任何转换。因此,机器代码的执行速度非常快。
  4. 分析器线程: 它有助于性能优化。
  5. 垃圾回收线程: 通过其标记-清除算法进行分配和释放空间,提供内存管理。
  6. Crankshaft: 它构建执行次数较多的代码片段,并进行优化,以便在再次调用该代码片段时以最佳方式运行。

Node.js 与 V8 的关系

V8 作为核心引擎

  • JavaScript 执行: Node.js 使用 V8 在服务器上编译和运行 JavaScript,就像在 Web 浏览器环境中一样高效地执行 JavaScript。
  • 性能优势: V8 的 JIT 编译可以对 Node.js 支持大量并发连接、高吞吐量和低延迟的能力产生积极影响。

V8 的集成

  • 嵌入 V8: 在这种情况下,V8 被嵌入到 Node.js 中,允许在 Web 浏览器框架之外执行 JavaScript。
  • 访问 V8 API: Node.js 公开了一些 V8 的内部 API,使开发人员能够执行一些高性能代码。

V8 功能的扩展

  • Node.js API 层: 尽管 V8 具有强大的性能,但存在功能限制,因为 Node 应用程序中的某些任务需要在正常的 C 规范内执行。Node.js 确实提供了 API(例如 fs)。
  • C++ 插件: 开发人员可以开发和集成原生的 C++ 插件到 Node.js 的模块中,以提高运行时效率。

异步 I/O 和 V8

  • 事件循环集成: 在这种情况下,可以忽略 V8,Node.js 通过事件循环允许非阻塞 I/O 操作,以管理数千个并发操作而不会阻塞 JavaScript 代码的执行。
  • 事件循环性能: 此外,V8 函数的速度不断提高 Node.js I/O 事件循环的性能。

内存管理和 V8

  • 垃圾回收: 对于任何长期运行的应用程序,内存的垃圾回收和 V8 内部的模块级对象引用都是一个重要方面。
  • 内存限制: V8 确实存在内存限制(例如最大堆大小),这可能会在 Node.js 应用程序的内存密集型操作中代表有限的规模。

结论

总之,Node.jsV8 是两个密切相关的组件,更具体地说,V8 是一个核心 JavaScript 引擎,它是 Node.js functioning 的基本组成部分。V8 是 Google 为 Chrome 浏览器创建的最受欢迎的 JavaScript 引擎之一,其主要重点是通过编译到机器代码来提高 JavaScript 的性能。V8 比 Node.js 更快,因为它与 Node.js 集成。这种集成允许 Node.js 利用 V8,V8 在执行应用程序方面能够提供高性能,从而实现可扩展且高效的服务器端。因此,V8 是 Node.js 的一个重要组成部分,因为它提供了作为框架基础的命令执行和速度,这将使编写用于全栈应用程序的 JavaScript 更加容易。