背景
什么是V8
V8引擎是一个JavaScript引擎的实现,使用C++开发,目前主要用在 Chrome browser和 NodeJS中。作为一种虚拟机,将人类可以理解的编程语言翻译为机器可以理解的语言。
浏览器引擎
浏览器引擎(Rendering Engine)包括布局引擎、渲染引擎,它的名字有很多比如渲染引擎、排版引擎、解释引擎 ,它是浏览器的重要组成部分,它将Html、CSS、JavaScript转换成用户可见的图形结果。早期JS引擎包含在浏览器引擎中,现在JS引擎越来越独立,使得js不仅仅局限在浏览器中使用。
不同的厂商使用不同的浏览器引擎与JS引擎,主流浏览器引擎使用对比如下表所示。
| 主流浏览器 | 浏览器渲染引擎 | js引擎 |
|---|---|---|
| IE -> Edge | Trident -> EdgeHTML -> Blink | JScript(IE3.0-IE8.0) / Chakra(IE9+) |
| Firefox | gecko内核 | SpiderMonkey(1.0-3.0)/ TraceMonkey(3.5-3.6)/ JaegerMonkey(4.0-) |
| Safari | Webkit | Nitro(4-) |
| chrome | Webkit-> Blink | V8 |
| Opera | Presto-> Blink | Linear A(4.0-6.1)/ Linear B(7.0-9.2)/ Futhark(9.5-10.2)/ Carakan(10.5-) |
js代码如何被执行
- 解释执行,需要先将输入的源代码通过解析器编译成中间代码,之后直接使用解释器解释执行中间代码,然后直接输出结果。具体流程如下图所示
- 编译执行。采用这种方式时,也需要先将源代码转换为中间代码,然后我们的编译器再将中间代码编译成机器代码。
V8引擎
在 V8 出现之前,所有的 JavaScript 虚拟机所采用的都是解释执行的方式,这是 JavaScript 执行速度过慢的一个主要原因。V8 率先引入了即时编译JIT(Just In Time)技术,混合编译执行和解释执行这两种手段,给 JavaScript 的执行速度带来了极大的提升。