【问题标题】:What is the difference between JavaScript Engine and JavaScript Runtime EnvironmentJavaScript 引擎和 JavaScript 运行时环境有什么区别
【发布时间】:2015-03-13 08:34:18
【问题描述】:

我有点困惑,谁能帮忙描述一下 JavaScript 引擎和 JavaScript 运行时环境之间的区别。 顺便说一句,Event Loop 是在 Engine 还是 Runtime 中实现的?

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

    • 解析您的代码并将其转换为可运行的命令
    • 为javascript提供一些对象,使其可以与外界交互。

    第一部分称为引擎,第二部分称为运行时。

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

    【讨论】:

    • 非常感谢您的回答,简洁易懂。
    • @georg 能否提供一些链接,以便我对此有更好的了解。
    • 这很好很简单,但是编译器和引擎有什么区别呢?
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 把抽象的概念具体化,让人更容易理解。
    【解决方案3】:

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

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

    我们将这些东西称为运行时支持服务

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

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

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

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

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

    【讨论】:

    • 感谢您的耐心解答。
    【解决方案4】:

    Javascript 运行时环境


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

    这是运行时环境列表

    • Browser:提供DOM API、Fetch API、Timer(setTimeout & setInterval)、Storage(类似Local Storage)等

    示例: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

    用于:用于火狐浏览器

    • Nitro / JavascriptCore:来自 Apple

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

    • Chakra 和 CharkraCore:来自微软

    用于:在 Microsoft Edge 浏览器中使用



    Excellent Link for More Infomation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 2013-07-28
      • 2021-07-25
      • 2011-06-28
      • 2010-09-19
      相关资源
      最近更新 更多