我刚刚开始使用Node.js,我有相当多的Python和C++背景。我知道Node.js是一个运行时环境,但我很难理解它对代码的实际作用,这使得它不同于编译器。如果有人能够解释具体的运行时环境与典型的编译器和解释器有何不同,那就更好了。
发布于 2021-10-24 14:18:59
让我们这样做:
Node.js是建立在Chrome的V8 JavaScript引擎上的JavaScript运行时。
V8是引擎,Google也使用同样的引擎。还有其他JS引擎,如火狐使用的SpiderMonkey,Safari使用的JavaScriptCore,以及边缘最初基于Chakra的JS引擎,但是它已经被重新构建为使用V8引擎。
在讨论V8的工作方式之前,我们必须先了解这种关系。
JavaScript引擎独立于它所在的浏览器。这个关键特性促成了Node.js的兴起。V8被选为驱动Node.js的引擎。
由于V8是独立的、开源的,所以我们可以将它放入我们的C++程序中,Nodejs本身只是一个用C++编写的程序。Nodejs采用了V8,并通过添加服务器需要的特性对其进行了增强。
JavaScript通常被认为是一种解释语言,但是现代的JavaScript引擎不再仅仅解释JavaScript,而是编译它。
由于您有C++背景,C++执行所谓的“提前编译”(AOT)编译,在编译期间将代码转换为执行前的机器代码。
另一方面,JavaScript是由V8内部编译的,而JIT编译是在执行过程中完成的。当代码由解释器执行时,它将跟踪经常调用的函数,并将它们标记为热函数,然后将它们编译成机器代码并存储它们。
发布于 2021-10-24 07:45:50
编译器是将代码从一种语言转换为另一种语言的程序。例如,在Java中,我们有一个java编译器javac
,您可以在.java
文件上运行它,将代码编译成与平台无关的java文件(任何jvm都可以理解和执行)。由于您是JavaScript新手,您将遇到将下一代 JavaScript代码转换为可由所有浏览器(甚至旧浏览器)处理的遗留JavaScript代码的转播器(比如babel)。运行时是一个比较模糊的概念。它可以从在特定操作系统上运行编译代码的一组函数转变为程序运行的整个环境。对于NodeJS,它是您可以在浏览器之外运行JavaScript程序的环境。它采用了在Chrome浏览器上运行JavaScript的Chrome的JavaScript引擎,并使其随处可见。这就是JavaScript如何从只在浏览器上运行的客户端编程语言转变为可以在运行时环境NodeJS的服务器上运行的服务器端编程语言。
发布于 2021-10-24 07:58:27
以下几个简单的要点可能会有所帮助:
https://stackoverflow.com/questions/69694677
复制相似问题