文章插图
3.3 引擎的核心
文章插图
我们之前谈到 , JavaScript 是由 Ignition 这个解释器解释的 , 同时由 TurboFan 这个 JIT 优化编译器进行编译 。
首先 , 前面步骤生成的 ASTs 传递给解释器 , 该解释器迅速生成未经过优化的机器码 , 并且其执行是无延迟的 。
Profiler 在代码运行时进行观察 , 找出可以进行优化的地方 。例如 , 一个‘for’循环跑了 100 次 , 但是每次迭代产生的结果都是一样的 。
使用这个分析器后 , 任何未优化的代码都将传递给编译器以进行优化 , 同时生成机器码 , 它最终会替换掉之前由解释器生成的未优化代码中的对应部分 。
随着分析器和编译器不断地更改字节码 , JavaScript 的执行性能逐渐提高 。
3.4 更多历史
在V8 的 5.9 版本推出之前 , 它使用两个优化编译器和一个基线编译器 。
- 基线编译器 full-codegen 迅速生成未优化的机器码 。
- 两个优化编译器 Crankshaft 和 TurboFan 用于优化代码 。
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
推荐阅读
- CVT、双离合、AT怎么选,究竟哪种变速箱最好?
- 针灸临床研究首登国际内科学“第一刊”
- 浙江大学|浙大教授质疑空姐招收研究生:去天上“倒水”?对此网友各执己见
- 红碎茶的发展现状和制作工艺研究流程
- JavaScript常用基础算法
- 国内公开首个月球样本实验室的意义 月球土壤研究成果
- 中医养生 打通经络7种方法
- 喝茶讲究,政和工夫红茶的饮用注意事项
- 太极阴阳诀太极九诀中的至高法诀
- 率先开始勘测研究可燃冰的国家是