运行时环境和编译器/解释器是否相同?

Shi*_*sad 5 javascript runtime-environment node.js

我刚刚开始使用 Node.js,并且有相当多的 Python 和 C++ 背景。我了解到 Node.js 是一个运行时环境,但我很难理解它对代码的实际作用,使其与编译器不同。如果有人能够解释运行时环境与典型编译器和解释器的具体区别,那就更好了。

小智 5

让我们这样看:

\n
\n

Node.js 是一个基于 Chrome\xe2\x80\x99s V8 JavaScript 引擎构建的 JavaScript 运行时。

\n
\n

V8 是 Google Javascript 引擎,Google Chrome 使用相同的引擎。\n还有其他 JS 引擎,例如 Firefox 使用的 SpiderMonkey、Safari 使用的 JavaScriptCore,而 Edge 最初基于 Chakra,但已被重建为使用 V8 引擎。

\n

在讨论 V8 的工作原理之前,我们必须首先了解其中的关系。

\n
\n

JavaScript 引擎独立于其所在的浏览器。这一关键特性促成了 Node.js 的崛起。V8 被选为 Node.js 的驱动引擎。

\n
\n

由于V8是独立开源的,我们可以将其嵌入到我们的C++程序中,而Nodejs本身只是一个用C++编写的程序。Nodejs 采用了 V8 并通过添加服务器所需的功能对其进行了增强。

\n
\n

JavaScript 通常被认为是一种解释性语言,但现代 JavaScript 引擎不再仅仅解释 JavaScript,而是编译它。

\n
\n

由于您有 C++ 背景,C++ 执行所谓的提前 (AOT) 编译,代码在编译过程中转换为机器代码,然后再执行。

\n

另一方面,JavaScript 由 V8 内部编译,并在执行期间完成即时 (JIT) 编译。当解释器执行代码时,它将跟踪经常调用的函数并将它们标记为热函数,然后将它们编译为机器代码并存储它们。

\n