在 Node.js 中解释 V8 引擎
什么是 V8 发动机?
V8 是 Google 开发的基于 C++ 的开源 JavaScript 引擎。它最初是在 2008 年为 Google Chrome 和基于 Chromium 的浏览器(例如 Brave)设计的,但后来被用于创建 Node.js 以进行服务器端编码。实际上,基于 JSON 的 No-SQL 数据库(如 Couchbase 和广泛使用的 MongoDB)使用 V8 引擎。 V8 还为著名的桌面应用程序框架 Electron 和最新的服务器端运行时环境 Demo 提供支持。
V8 被称为 JavaScript 引擎,因为它需要 JavaScript 代码并在 Chrome 中浏览时执行它。它为 JavaScript 代码的执行提供了运行时环境。最好的部分是 JavaScript 引擎完全独立于运行它的浏览器。这是导致 Node.js 设计者选择 V8 引擎来驱动框架的特性,剩下的就是历史了。随着 Node.JS 的普及,V8 引擎也被用于构建桌面框架和数据库。
V8 引擎是如何工作的?
JavaScript 引擎是解释 JavaScript 代码并运行它的解释器。开发 JavaScript 引擎的第一种方法是将其实现为标准解释器,就像 Mozilla 的 SpiderMonkey 所做的那样。另一种选择是采用即时 (JIT) 编译,它可以像 V8 一样将原生 JavaScript 代码转换为机器代码。 V8 代码与其他编程语言的区别在于它不生成中间代码。
当开发人员或程序在 V8 上(即在浏览器或 Node 环境中)运行时,Ignition 解释器编译 JavaScript 代码并生成未优化的机器代码。 V8 的 Turbofan 和 Crankshaft 组件在运行时检查并重新编译机器代码以获得最佳性能。
Node.Js 和 V8
Node.js 被称为运行时环境,因为它包含运行 JavaScript 程序所需的一切。
这个 V8 引擎是 Node.js 的核心。该图比较了Java虚拟机 (JVM),它用于为Java运行时环境和 V8 引擎提供动力。除了 V8 引擎之外,Node.js 运行时环境还包括几个 Node API 来支持 Node.js 环境。我们可以通过安装额外的 npm 包来增强节点代码的功能。
要记住的一件事是,V8 本质上是一个独立的 C++ 库,用于通过 Node 或 Chromium 运行 JavaScript 代码。 V8 公开了其他应用程序可以使用的 API,因此您可以将 V8 嵌入到 C++ 程序中并从中运行 JavaScript 程序。 Node 和 Chrome 以这种方式工作。
假设我们想在 JavaScript 代码中添加除了 console.log('Hello World') 之外的语句,例如 print('hello world')。在已经开源的 V8 中,我们可以添加自己的 C++ 实现 print函数。
Node.js 中 V8 的内存限制
目前,V8 在 32 位计算机上的 RAM 限制为 512MB,在 64 位平台上默认为 1GB。可以通过将 –max-old-space-size 设置为 32 位系统的最大 ~1gb 和 64 位系统的 ~1.7gb 来增加此限制。如果您的内存不足,最好将您的单个进程分解为多个工作进程。
Node.js 可以在没有 V8 的情况下工作吗?
当前的 Node.js 引擎需要 V8 才能函数。在没有 V8 的情况下,它没有 JavaScript 引擎,因此无法运行 JavaScript 代码。 C++ 和 JavaScript 之间的 V8 接口被 Node.js 附带的本机代码绑定使用,例如 fs(文件系统)模块和 Net 模块。
尽管在科技界一切皆有可能,微软在 2016 年 7 月尝试用 Chakra JavaScript 引擎(当时在 Edge 中使用)替换 Node.js 中的 V8 引擎,但该项目从未起飞,最近微软 Edge切换到使用 V8 JavaScript 引擎的 Chromium。
DENO 是服务器端编程领域引入的最新技术。许多人认为它将在未来 2-3 年内替代 Node.js,并且它还由 V8 JavaScript 引擎提供支持。