关于javascript:浏览器工作原理与实践三

4次阅读

共计 657 个字符,预计需要花费 2 分钟才能阅读完成。

编译器(Compiler),解释器(InterPerter),形象语法树(AST),字节码(ByteCode),即时编译器(JIT)。

  1. 生成抽像语法树和执行上下文。
    AST用于 babel,先将ES6 转为 AST,再将ES6AST转为 ES5AST,最初利用 ES5AST生成 JS 源代码。
    生成 AST 2 个阶段:(1)分词(词法剖析) 将源码拆成 tokenvar myName='思否'。关键字var、标识符myName、赋值运算符=、字符串 思否 都是 token。(2)解释(语法分析)将token 依据语法规定转成 AST,先分词再解释。有了AST 就会成为可执行上下文。
  2. 生成字节码,有了 AST 和执行上下文,解释器 Ignition 就会依据 AST 生成字节码并解释执行字节码。一开始 V8 是间接将 AST 转为机器码的,因为机器码执行效率高,然而占内存,起初才引入了字节码。字节码是介于 AST 和机器码之间的一种代码字节码须要通过解释器转成机器码能力执行。
  3. 执行代码,第一次执行字节码,解释器 (Ignition) 会逐条解释执行,如果有被执行屡次的代码,编译器 TurboFan 会把这段代码编译为机器码,并把编译后的机器码保存起来。当再次执行这段代码时,只用执行保留的机器码就行了。晋升了执行效率,执行工夫越久反复执行代码越多,被保留的编译机器码越多,不必编译就越快。被称为即时编译:字节码 + 解释器 + 编译器。
var myName='思否';
function foo(){ return 23};
myName='segmentfault';
foo();

编译后:

正文完
 0