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

cla*_*ark 51 javascript

我感到有点困惑,有人可以帮助描述JavaScript Engine和JavaScript Runtime Environment之间的区别.BTW,事件循环是在引擎还是运行时实现的?

geo*_*org 118

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

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

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

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

  • 这很好也很简单,但是编译器和引擎有什么区别呢? (3认同)
  • 非常感谢您的回答,它简洁易懂。 (2认同)

Luo*_*Hui 27

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

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

想象一下机器人正在灭火:

  • JavaScript代码将是机器人灭火的指令.
  • JavaScript引擎将是可以理解指令并对其进行操作的机器人.
  • JavaScript运行时将是消防车和水枪.

  • 使抽象概念具体化,人们会更好地理解. (4认同)

Jör*_*tag 21

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

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

我们称之为运行时支持服务.

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

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

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

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

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

  • 感谢您耐心的回答。 (2认同)

raj*_*008 11

Javascript 运行时环境


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

这是运行时环境列表

  • Browser : 提供DOM API, Fetch API, Timer( setTimeout & setInterval ), Storage (like Local Storage) 等。

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

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

示例:NodeJS、Deno

  • 桌面环境:提供GUI API文件系统访问、网络访问、控制台等。

例如:电子等。

  • 移动环境

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

注意:事件循环是在运行时环境中实现的



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


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

这是引擎列表

  • Chrome V8:来自谷歌

用于:用于 Chrome 浏览器、NodeJS 和基于 android 的手机

  • 蜘蛛猴:来自 Mozilla

用于:在 Firefox 浏览器中使用

  • Nitro / JavascriptCore : 来自 Apple

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

  • Chakra & CharkraCore : 来自微软

用于:用于 Microsoft Edge 浏览器



获取更多信息的优秀链接