zoukankan      html  css  js  c++  java
  • v8引擎是如何执行一段js代码的?

    ①AST(Abstract Syntax Tree):抽象语法树,一种数据结构

    ②HotSpot:热点代码,多次出现的代码

    ③Bytecode:字节码

    ④Machine code:机器码

    ⑤Ingition:解释器,将AST转换为Bytecode

    ⑥TurBoFan:编译器,将Bytecode转换为Machine code

    ⑦JIT(ust-in-time compilation):即时编译,运行的时候编译执行

    1.AST的解释以及生成过程:

      1.1.AST是很重要的一种数据结构,Babel和Eslint的工作原理就是先将源代码转换为AST,然后再进行其他操作

      1.2.AST的生成过程:先分词,再解析:先将源代码拆分为一个个token(不可再分的字符或者字符串),然后将token解析为AST

    2.js引擎理解:

      2.1.是用来处理js代码的一段程序或者解释器,对原代码进行词法分析和语法分析后生成AST,基于AST再生成字节码,从而执行代码。

      2.2.执行过程:

        2.2.1.语法分析阶段:对加载完成的代码进行语法检验,检验完成后进入预编译阶段;

        2.2.2.预编译阶段:搜集函数名以及变量提升,确定this指向和作用域链

        2.2.3执行阶段:通过事件循环执行

    3.v8引擎:

      3.1.v8引擎是js引擎的一种,其特点是提高js执行性能

      3.2.v8执行代码过程:

        3.2.1.将源代码生成AST:源代码进行词法分析和语法分析后生成AST

        3.2.2.生成字节码:根据AST生成字节码,字节码通过Ingition转换为机器码才能执行

        3.2.3.执行代码:如果一段字节码是第一次执行,解释器会逐行执行;如果在执行字节码过程中发现有HotSpot,JIT即时编译器就会把HotSpot编译为机器码,并保存起来,下次就可以直接使用了,省去了将字节码转换为机器码的过程,提升了执行效率;

  • 相关阅读:
    WordPress使用记录
    Sql Server数据库的存储过程
    (一)vs2010 新建、使用dll
    Commons Betwixt : Turning beans into XML
    error: failed to attach to process ID 0
    java中常用的内存区域
    计算N阶乘中结尾有多少零
    计算出两个日期相隔多少天
    Cognos Active Report 时间区间选择的解决办法
    PHP heredoc 用法
  • 原文地址:https://www.cnblogs.com/zxmonster/p/11874469.html
Copyright © 2011-2022 走看看