3.2 解析和构建树
JavaScript 文件进入引擎后,解析器进行词法解析 , 它将代码分解成 token 以确定它们的含义 。这些 token 组成了AST(抽象语法树) 。
编译器在语义分析中验证语言元素和关键词的正确用法,而 ASTs 在这个过程中扮演着重要的角色 。之后,ASTs 被用于生成实际的字节码或者机器码 。
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
推荐阅读
- ssw是什么意思 ssw
- 梦见学英语补考 梦见学英语补考什么意思
- 母零是什么 母零
- 梦见初三厌学 梦见初三厌学什么意思
- 梦见别人给自己买鞋穿 梦见别人给自己买鞋穿是什么意思
- 幽的部首是什么再查几画 幽的部首是什么
- 华为al00a是什么型号 med-al00是华为什么型号
- 俯瞰是什么意思怎解释 俯瞰是什么意思
- ip地址是什么意思的缩写 ip地址是什么
- 汽车cvt是什么意思 关于汽车cvt介绍