有没有想过当您在浏览器中运行 JavaScript 时会发生什么?好吧,是时候向您介绍 V8,这个让 JavaScript 栩栩如生的神奇引擎。将 V8 视为汽车的引擎 - 它负责将 JavaScript 转换为您的计算机可以理解并平稳快速地运行的东西。
让我们深入了解 V8 的工作原理,但别担心,我会让它变得有趣和简单! ?
V8 引擎 是 Google 开发的开源 JavaScript 引擎。它为 Google Chrome 和许多其他环境提供支持,例如 Node.js。本质上,V8 获取您的 JavaScript 代码,将其编译为机器代码,然后超快地运行它!
你编写 JS,V8 确保你的机器确切地知道如何处理它。
当你编写 JavaScript 时,V8 做的第一件事就是解析你的代码。它将您的代码分割成小的、可理解的块(称为标记)并创建一个 语法树 (AST)。这棵树就像一张地图,显示了代码的结构。
let a = 10; let b = 20; let sum = a b;
V8 看到这段代码并想,“好吧,我看到两个变量和一个求和运算。”
一旦构建了语法树,V8 就会使用称为 Ignition 解释器的东西。解释器快速浏览您的代码并按原样运行它,但还不是超级快!这就像对您的代码进行测试运行以查看其行为方式。
将 Ignition 想象成“试运行”模式。它执行代码即时,此时没有太多优化。
当您的 JavaScript 运行时,V8 会密切关注它。它监视代码中经常使用的部分,这些部分称为热门函数。这就像找出汽车中哪些齿轮在比赛中使用最多。
如果一段代码被一遍又一遍地执行,V8 会对其进行标记并说:“嘿,这部分代码需要进行一些认真的优化!”
当 V8 注意到一些热门函数时,它会将它们交给 TurboFan 编译器。 TurboFan 就像比赛中的维修人员 - 它会获取您的代码并优化它以提高速度。
神奇之处在于:TurboFan 将您的 JavaScript 转换为机器代码(计算机可以理解的二进制 0 和 1)。这种优化的机器代码比 Ignition 最初生成的代码要快得多。
如果您有一个将两个数字相加的函数并且您经常调用它,TurboFan 将使该函数尽可能快。
当你运行 JavaScript 时,你经常创建变量、对象、数组等。一旦你完成了它们,V8 就会介入垃圾收集,一个自动从你的东西中释放内存的过程不再需要了。这可以防止您的浏览器或 Node.js 服务器内存不足和崩溃。
V8 中的垃圾收集很聪明——它不只是随机扔掉东西。它使用标记和清除等技术来仔细跟踪和删除未使用的数据。
V8 使用一种称为 即时 (JIT) 编译的技术。这意味着 V8 不是在运行 JavaScript 之前对其进行编译(像许多其他语言一样),而是在代码运行时编译您的代码 ,从而实时大幅提升速度!
function factorial(n) { if (n === 0) { return 1; } return n * factorial(n - 1); } console.log(factorial(5)); // Output: 120以下是 V8 中发生的事情:
因此,每次您在 Chrome 或 Node.js 中运行 JavaScript 时,都要知道 V8 正在幕后努力工作,解释、优化和管理您的代码,确保您的应用程序快速高效地运行。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3