浏览器渲染过程
浏览页面:输入服务器地址 - index.html - 遇到css / js - 渲染 / 执行
JavaScript引擎
JavaScript 引擎将 JavaScript 代码翻译成 CPU指令 来执行。
- 浏览器内核和JS引擎的关系
以WebKit为例,WebKit事实上由两部分组成的:
WebCore:负责HTML解析、布局、渲染等等相关的工作
JavaScriptCore:解析、执行JavaScript代码\ - V8引擎的原理
- Parse 模块会将 JavaScript 代码转换成 AST(抽象语法树),因为解释器并不直接认识JavaScript代码,如果函数没有被调用,那么是不会被转换成AST的。AST
- Ignition是一个解释器,会将AST转换成ByteCode(字节码)
- TurboFan是一个编译器,可以将字节码编译为CPU可以直接执行的机器码,如果一个函数被多次调用,那么就会被标记为热点函数,那么就会经过TurboFan转换成优化的机器码,提高代码的执行性能
- 全局代码执行过程
var name = "why"
var num1 = 20
var num2 = 30
var result = num1 + num2
1.代码解析:v8引擎内部会创建一个对象(GlobalObject -> go)
var globalObject = {
String: "类",
Date: "类",
setTimeount: "函数",
window: globalObject,
name: undefined,
num1: undefined,
num2: undefined,
result: undefined
}
2.运行代码
2.1 v8为了执行代码, v8引擎内部会有一个执行上下文栈(Execution Context Stack, ECStack)(函数调用栈)
2.2 因为我们执行的是全局代码, 为了全局代码能够正常的执行, 需要创建 全局执行上下文(Global Execution Context)(全局代码需要被执行时才会创建)