JavaScript Engine和JavaScript Runtime Environment之间有什么区别

时间:2015-03-13 08:34:18

标签: javascript

我感到有点困惑,有人可以帮忙描述JavaScript Engine和JavaScript Runtime Environment之间的区别。 BTW,Event Loop是在Engine还是Runtime中实现的?

4 个答案:

答案 0 :(得分:111)

与C和其他编译语言不同,Javascript在一个容器中运行 - 一个读取你的js代码并运行它们的程序。这个程序必须做两件事

  • 解析您的代码并将其转换为runnable命令
  • 向javascript提供一些对象,以便它可以与外部世界进行交互。

第一部分称为Engine,第二部分是Runtime。

例如,Chrome浏览器和node.js使用相同的引擎 - V8,但它们的运行时不同:在Chrome中,您有window,DOM对象等,而节点为您提供require ,缓冲区和进程。

答案 1 :(得分:23)

想象一下机器人正在播放音乐:

  • JavaScript代码将是机器人的音符。
  • TheJavaScript引擎将是能够理解笔记并对其进行操作的机器人。
  • JavaScript运行时将是机器人可以用来播放音乐的乐器。

想象一下机器人扑灭火灾:

  • JavaScript代码将是机器人灭火的指示。
  • JavaScript引擎将是能够理解指令并对其采取行动的机器人。
  • JavaScript运行时将是消防车和水枪。

答案 2 :(得分:20)

让我们首先想象一下JavaScript的Ahead-Of-Time编译实现。

编译器会将JavaScript代码转换为您可以运行的本机x86机器代码。但是,JavaScript中有一些东西在运行时发生,因此无法静态编译。例如,垃圾收集或反射。因此,为了使程序运行,需要在运行时提供某种支持服务,例如垃圾收集器和反射系统。此外,JavaScript有eval,这意味着(在我们假设的编译实现中)编译器本身或其他一些解释器需要在运行时可用。

让我们将这些内容称为运行时支持服务

需要为该程序提供的第二件事是ArrayFunctionObject等对象以及forEach等功能。这个需要从一开始就可供程序使用的对象和函数集合通常称为核心库基础库。对于像JavaScript这样的嵌入式语言,根据上下文,还有其他假定存在的库。例如,对于浏览器中嵌入的JavaScript,我们期望DOM对象和函数以及全局windowdocument对象等存在。这些也可以被视为核心库的一部分。

最后,让我们忘记我们的假设编译器并查看解释器(或JIT编译器或混合模式引擎或字节码VM)。在这里, Interpreter (或JIT,或其他)是拼图的第三部分。这是实际执行JavaScript程序的事情。 (从技术上讲,JIT不执行,编译,然后执行其他操作。)

术语不是100%明确:有时,只有运行时支持服务被称为运行时环境,有时,核心库也包含在内。

执行引擎仅指解释器(JIT,VM,...)或解释器和运行时环境的组合。编译器永远不会被称为执行引擎(它不执行任何操作,只是翻译成另一种语言),术语执行引擎很少用于引用静态编译的实现。

事件循环是主机环境的一部分,而不是JavaScript实现。

答案 3 :(得分:8)

Javascript运行时环境


  1. 提供各种功能/ API来构建基于Java的软件。
  2. 它还包括一个JS引擎(解释器+ JIT编译器(出于优化目的))。

这是运行时环境的列表

  • 浏览器:提供 DOM API,提取 API,计时器( setTimeout&setInterval ),存储(如本地存储)等

示例:Chrome,Firefox,Safari,Opera,Edge

  • 服务器环境:提供文件系统访问权限,网络访问权限,控制台等。

示例:NodeJS,Deno

  • 台式机环境:提供 GUI API 文件系统访问权限,网络访问权限,控制台等。

示例:电子等

  • 移动环境

示例:NativeScript,Ionic,PhoneGap,React Native等

注意:事件循环是在运行时环境

中实现的

Javascript引擎(解释器/ JIT编译器(用于优化))


  1. 将您的Javascript代码转换为机器语言/代码,以便您的计算机(CPU)执行它:)

这是引擎列表

  • Chrome V8 :来自Google

用于:用于Chrome浏览器,NodeJS和基于Android的手机中

  • SpiderMonkey :来自Mozilla

用于:在Firefox浏览器中使用

  • Nitro / JavascriptCore :来自苹果公司

用于:用于Safari浏览器和基于iOS的手机

  • Chakra和CharkraCore :来自Microsoft

用于:用于Microsoft Edge浏览器



Excellent Link for More Infomation