JavaScript 究竟是如何工作的?( 二 )


JavaScript 究竟是如何工作的?

文章插图
 
3.3 引擎的核心
 
JavaScript 究竟是如何工作的?

文章插图
 
 
我们之前谈到 , JavaScript 是由 Ignition 这个解释器解释的 , 同时由 TurboFan 这个 JIT 优化编译器进行编译 。
首先 , 前面步骤生成的 ASTs 传递给解释器 , 该解释器迅速生成未经过优化的机器码 , 并且其执行是无延迟的 。
Profiler 在代码运行时进行观察 , 找出可以进行优化的地方 。例如 , 一个‘for’循环跑了 100 次 , 但是每次迭代产生的结果都是一样的 。
使用这个分析器后 , 任何未优化的代码都将传递给编译器以进行优化 , 同时生成机器码 , 它最终会替换掉之前由解释器生成的未优化代码中的对应部分 。
随着分析器和编译器不断地更改字节码 , JavaScript 的执行性能逐渐提高 。
3.4 更多历史
在V8 的 5.9 版本推出之前 , 它使用两个优化编译器和一个基线编译器 。
  • 基线编译器 full-codegen 迅速生成未优化的机器码 。
  • 两个优化编译器 Crankshaft 和 TurboFan 用于优化代码 。
JavaScript 增加了新的特性后 , 架构的复杂度上升 , 维护相同的管道对 V8 团队来说变得更加困难了 。如果你想阅读更多相关的旧方法以及转向新管道的原因 , 可以访问他们的网站 。
3.5 放眼未来
随着更多进一步提升性能的研究的进行 , V8 引擎的工作机制在未来还可能发生变化 。此外 , 随着 Webassembly 逐渐成形 , 可能会向管道添加额外步骤 。
4.结论
ECMAScript 引擎的实现有很多 , 其中以谷歌的 V8 最为出名 。希望这篇文章的简述不仅可以帮助你理解 JavaScript 的工作原理 , 还能从大体上了解一门编程语言的工作原理 。如果你想了解 V8 团队的未来计划或者引擎的细节 , 这里有一篇很不错的博客 。
关于本文
译者:@Chorer
译文:https://chorer.github.io//2019/05/10/Trs-Javascript 究竟是如何工作的?(第一部分)/
作者:@Priyesh Patel
原文:https://blog.bitsrc.io/how-does-javascript-really-work-part-1-7681dd54a36d
 




推荐阅读