什么是JavaScript引擎

什么是JavaScript引擎

JavaScript 是一种多范式、基于原型的语言,使用像Chrome的V8引擎、Firefox的SpiderMonkey引擎等 JavaScript引擎 将高级代码转换为机器可读代码,使计算机能够执行特定任务。我们将通过一张图片来理解这一点。

什么是JavaScript引擎

Google chrome的JavaScript V8引擎: 首先,原始的JavaScript文件进入 解析器

  • 解析器: 它检查 语法语义 。解析器是词法分析,将代码分解为标记,以理解它们的含义,并将这些标记转换为抽象语法树(AST)。
  • 抽象语法树: 它是程序表示的分层树状结构,允许解释器理解程序。这个AST最初由 解释器 处理。
  • 解释器: 它允许 AST 转换为字节码。在V8引擎中,这个过程被称为Ignition,但是当一些代码反复出现时。
    例如:
// Arrow function
const multiply = (a, b)=> a*b;
 
for(let i=0;i<1000;i++){
    console.log(multiply(4, 3));
}
JavaScript
  • 在上面的代码中,我们调用multiply()函数1000次。当这段代码进入解释器时,解释器的性能会下降,因为解释器必须一遍又一遍地重复执行这段代码,然后分析器会将这段代码标记为热点代码并采取行动。
  • 分析器: 它将检查可以优化的重复代码。一旦它找到了重复的代码,它基本上会将代码移到 编译器 中。
  • 编译器: 它会生成 最优化的字节码。 在上面的示例中,它会检测到重复的代码,并通过将multiply(4, 3)替换为12来优化代码,因为这段代码一遍又一遍地重复出现,它将生成优化的字节码,该字节码将替换解释器生成的较慢的字节码。在V8引擎中,这个编译器被称为 TurboFan 。该过程一遍又一遍地重复进行,这意味着JavaScript引擎的速度得到改善,因为分析器和编译器将生成和更新优化的字节码。

Mozilla的SpiderMonkey JavaScript引擎: SpiderMonkey是由 JavaScript的创建者Brendan Eich 在1995年在Netscape Communication创建的第一个引擎,现在由Mozilla基金会维护。通过一张图像我们将会理解这个过程。

什么是JavaScript引擎

蜘蛛猴通过编译器将主要的JS代码转换为字节码,之后字节码分为两个部分: 解释器JIT编译器

Mozilla的SpiderMonkey引擎有三个重要的部分:

  • 解释器: 它使用switch语句跳转到当前指令的适当代码块。JS到JS的函数调用在不增加C堆栈的情况下推送JS堆栈帧。但是由于JS到C到JS的调用堆栈很常见,因此解释器是可重入的。
  • IonMonkey JIT编译器: 主要用于代码的优化。
  • 垃圾收集器: 用于回收程序不再使用的对象的内存。GC是一种标记-清除、非保守的收集器,用于保存JS对象和字符串描述符。

Chrome V8与Mozilla的Spider Monkey的区别: Chrome的V8引擎和Mozilla的SpiderMonkey主要在ECMAScript一致性测试262方面存在差异。该测试用于检查JavaScript实现对ECMAScript第五版规范标准的遵循程度,该规范由ECMA International创建。该测试由数千个单独的测试组成,用于检查规范的要求。
一致性测试:

Chrome的V8引擎 -> 98%

Mozilla的SpiderMonkey -> 87%

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册