目前正在看CoderWhy老师的高级js课,讲的非常仔细,学到了不少,以下是我总结的部分内容,不确定对错,持续更新
JavaScript 引擎的主要功能,就是结合 JavaScript 语言的特性和本质来编译执行它。
JavaScript,一种最常用于游览器的编程语言,目前,大部分游览器都是使用V8引擎,不管是安卓PC,使用以V8为内核的谷歌游览器的人数是最多的
V8引擎,是由C++编写的,超过100多万行代码,是当下最为广泛的js虚拟机
在V8引擎架构下的JavaScript的解析流程为:
① 引入JavaScript代码
② Parse(解析器)模块会将Js转换成AST(抽象语法树),这是因为解释器(Ignition)不认识JS代码,如果函数没被调用,是不会被转换成AST的,即func()
③ Ignition解释器,会将AST(抽象语法树)转换为字节码(ByteCode)
(转换字节码时):{
TurboFan:会同时收集优化所需要的信息(比如函数参数的类型,有了类型才能进行真实的计算)
如果只调用一次:Ignition会执行解释执行ByteCode字节码
}
④ TurboFan编译器,将字节码编译为CPU可以直接执行的机器码
如果一个函数被多次调用,那么会被标记为热点函数,那么就会被TurboFan转换成优化的机器码,提高代码的性能
但是,机器码实际上也会被返回字节码,这是因为如果后续执行函数的过程中,类型发生了转变(数字转换成字符),之前优化的机器码并不能正确的处理,会被逆向的转化成字节码
⑤ 执行代码:从上往下依次执行,可从③完成后直接执行,也可从④完成后执行
③和④可实现互相转换
JS代码,在游览器引擎下解析,转换成CPU代码,由CPU读取运行,所以电脑上也能运行,且这个解析过程,在游览器中被屏蔽掉了