美文网首页
V8引擎解析js代码和WASM模块链路

V8引擎解析js代码和WASM模块链路

作者: 盼旺 | 来源:发表于2019-12-10 12:19 被阅读0次

我们写的JavaScript代码直接交给浏览器或者Node执行时,底层的CPU是不认识的,也没法执行。CPU只认识自己的指令集,指令集对应的是汇编代码。写汇编代码是一件(不)(可)(能)的事情。

V8:强大的JavaScript引擎

V8由许多子模块构成,其中这4个模块是最重要的:

  • Parser:负责将JavaScript源码转换为Abstract Syntax Tree (AST)
  • Ignition:即解释器,负责将AST转换为Bytecode,解释执行Bytecode;同时收集TurboFan优化编译所需的信息,比如函数参数的类型
  • TurboFan:即编译器,利用Ignition所收集的类型信息,将Bytecode转换为优化的汇编代码;
  • Orinoco:垃圾回收模块,负责将程序不再需要的内存空间回收;

将JS源码编译为汇编代码流程图

简单地说,Parser将JS源码转换为AST,然后Ignition将AST转换为Bytecode,最后TurboFan将Bytecode转换为经过优化的Machine Code(实际上是汇编代码)。

图片中的红线是逆向的,这的确有点奇怪,Optimized Machine Code会被还原为Bytecode,这个过程叫做Deoptimization。这是因为Ignition收集的信息可能是错误的,比如add函数的参数之前是整数,后来又变成了字符串。生成的Optimized Machine Code已经假定add函数的参数是整数,那当然是错误的,于是需要进行Deoptimization。

function add(x, y) {
    return x + y;
}

add(1, 2);
add("1", "2");

wasm 并不需要以上的全部步骤-它如下所示插入到执行过程中

相关文章

  • V8引擎解析js代码和WASM模块链路

    我们写的JavaScript代码直接交给浏览器或者Node执行时,底层的CPU是不认识的,也没法执行。CPU只认识...

  • Node.js的运行机制

    Node.js的运行机制如下: V8引擎解析JavaScript脚本 解析后的代码 ,调用Node API lib...

  • nodejs Event Loop

    1.前置知识 node.js是一个可以运行js的平台包括fs模块、http模块以及JS引擎(v8) js引擎(单线...

  • es6的模块系统

    js引擎运行模块时: 语法解析: 阅读模块源代码,检查语法错误; 加载: 递归的加载所有被导入的模块(深度优先遍历...

  • Android JS引擎(V8,JSC,Hermes)的使用

    Android端的JS引擎:V8,JSC,Hermes V8和JSC是Android端常见的JS引擎。Hermes...

  • js sort原理

    js提供了sort方法,方便对数组进行排序,然而不同引擎对js的sort方法解析可能存在差异。本文基于v8引擎进行...

  • Javascript 性能优化02

    一、V8 引擎执行流程 V8 引擎是浏览器渲染引擎里的js执行代码的组成部分 Scanner 是一个扫描器 Pa...

  • Node中的Event Loop

    Node简介 Node中的Event Loop和浏览器中的完全不相同的东西。Node.js采用V8作为js解析引擎...

  • Nodejs单线程为什么能支持高并发?

    Nodejs运行机制 V8引擎解析JavaScript脚本 解析后的代码,调用Node API libuv库负责N...

  • node实战

    v8: node.js中集成了v8引擎,运行速度非常快libuv: 1.异步IO,实现非堵塞。2.后台js代码通过...

网友评论

      本文标题:V8引擎解析js代码和WASM模块链路

      本文链接:https://www.haomeiwen.com/subject/epxbgctx.html