流行的浏览器内核:苹果的webkit、chrome的blink;其中chrome曾经也用过苹果的webkit作为内核,但是后来依据webkit的基础之上,自己开发出了blink内核,因此我们可以说blink内核是webkit内核的一个分支;
内核也可以称为浏览器的排版引擎,不同的内核,渲染出来的html页面也是不同的,所以这就是为什么我们前端人员这么痛恨曾经的IE浏览器了(原因之一),而真正用来解析JS代码是由JS引擎来解析的,他是属于浏览器内核的一部分(浏览器内核分为:WebCore用来解析排版,JS引擎用来解析JS代码);
V8引擎除了浏览器有,Node环境里也有V8引擎,这就是为什么浏览器和Node都可以执行js代码
目前比较流行的JS引擎是V8引擎,该引擎为什么好用?因为在执行JS代码时,他会先将JS代码Parse
解析成AST抽象语法树
,在AST抽象语法树
中将关键字、变量、数值一一记录上,然后通过Ignition
解析成对应的字节码,由于不同操作系统定义的CPU执行是不同的,所以存在跨平台的问题,但是通过字节码就可以解决跨平台,这就是为什么Java可以跨平台的原因;
生成字节码后再通过处理生成机器码,这样就可以运行了,本质上最后都是由CPU运行解析,但是JS引擎帮我们屏蔽了这个过程;那为什么说V8引擎就是最好的呢?因为如果有很多重复的JS代码,比如方法,难道我们需要每个都一一转换吗,感觉很消耗性能;
因此V8引擎提供了TurboFan
用来找到重复的代码并直接生成机器码,提高效率,但是如果一个方法是用来求和的,我们通过数值类型可以很好的求和,但是传入字符串则变成了拼接方法,那么V8引擎如何应对?
V8引擎会发现这些问题,然后再单独转换成字节码并最终生成机器码,所以如果我们使用TypeScript规定类型注入,本质上是可以提高JS解析速度的,这就是为什么V8引擎优越的地方;