浏览器内核:
1.渲染引擎
2.js引擎
JS引擎:
1.编译器
2.解释器
3.JIT工具
4.垃圾回收
解释器
也称为 JS 解释器,用来读取网页中的 JavaScript 代码,对其处理后运行,比如 Chrome 浏览器的 V8
下面介绍V8引擎
JIT工具:实际上是是一种编译器,即时编译器
JIT是一种提高程序运行效率的方法。通常,程序有两种运行方式:静态编译与动态解释。静态编译的程序在执行前全部被翻译为机器码,
而动态解释执行的则是一句一句边运行边翻译。
垃圾回收是防止内存泄漏
JS是单线程.但是浏览器是多进程的
V8引擎:
官方原话:V8是Google的开源的JavaScript和WebAssembly引擎,用C++编写。
V8是谷歌开源的JS引擎
运行流程
解析器[Parser] 将JS解析成AST
解释器会将AST翻译形成字节码.
优化编译器,会对编译的代码进行优化,最终形成字节码
AST 抽象语法树
抽象表示把js代码进行了结构化的转化,转化为一种数据结构。这种数据结构其实就是一个大的json对象,json我们都熟悉,
他就像一颗枝繁叶茂的树。有树根,有树干,有树枝,有树叶.无论多小多大,都是一棵完整的树。
不专业的语言就是把js代码=>json对象
AST的作用
AST的作用不仅仅是用来在JavaScript引擎的编译上,我们在实际的开发过程中也是经常使用的,
比如我们常用的babel插件将 ES6转化成ES5、使用 UglifyJS来压缩代码 、css预处理器、开发WebPack插件、
Vue-cli前端自动化工具等等,这些底层原理都是基于AST来实现的,AST能力十分强大,
能够帮助开发者理解JavaScript这门语言的精髓。
我们可以直接使用三方库来生成AST,这里推荐两个库,一个是recast,一个是babel用到的Babylon。
这里推荐babel插件手册去实际体验转换js代码的过程