1. 浏览器原理-v8引擎-js执行原理

52 阅读1分钟

浏览器渲染过程

浏览页面:输入服务器地址 - index.html - 遇到css / js - 渲染 / 执行 QQ截图20231021143457.png

JavaScript引擎

JavaScript 引擎将 JavaScript 代码翻译成 CPU指令 来执行。

  • 浏览器内核和JS引擎的关系
    以WebKit为例,WebKit事实上由两部分组成的:
    WebCore:负责HTML解析、布局、渲染等等相关的工作
    JavaScriptCore:解析、执行JavaScript代码\
  • V8引擎的原理
  1. Parse 模块会将 JavaScript 代码转换成 AST(抽象语法树),因为解释器并不直接认识JavaScript代码,如果函数没有被调用,那么是不会被转换成AST的。AST
  2. Ignition是一个解释器,会将AST转换成ByteCode(字节码)
  3. TurboFan是一个编译器,可以将字节码编译为CPU可以直接执行的机器码,如果一个函数被多次调用,那么就会被标记为热点函数,那么就会经过TurboFan转换成优化的机器码,提高代码的执行性能 QQ截图20231021153516.png
  • 全局代码执行过程
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)(全局代码需要被执行时才会创建)