浏览器工作流程
浏览器工作流程大致分为以下步骤:DNS 解析 —— HTTP 请求资源 —— 解析 HTML 创建 DOM 树 —— 解析 CSS 创建 CSSOM —— 执行 Javascript —— 创建 Render 树 —— 布局Layout(重排)—— 绘制 Painting(重绘)
V8引擎原理
V8 的核心模块包括:
- Parser:解析器负责将 JavaScript 代码转换成 AST 抽象语法树。
- Ignition:解释器负责将 AST 转换为字节码,并收集 TurboFan 需要的优化编译信息。
- TurboFan:利用解释器收集到的信息,将字节码转换为优化的机器码。
解析器 Parser 生成抽象语法树
解析器的解析过程分为两个阶段:
- 词法分析 (Scanner 词法分析器)
- 语法分析 (Pre-Parser、Parser 语法分析器)
词法分析
Scanner 负责接收 Unicode Stream 字符流,将其解析为 tokens,提供给解析器 Parser。
语法分析
接下来,语法分析会将上一步生成的 tokens,根据语法规则转换为 AST,如果源码存在语法错误,在这一阶段就会终止并抛出语法错误。
惰性解析
惰性解析就是指如果遇到并不是立即执行的函数,只会对其进行预解析(Pre-Parser),当函数被调用时,才会对其完全解析。
预解析时,只会验证函数的语法是否有效、解析函数声明以及确定函数作用域,并不会生成 AST,这项工作由 Pre-Parser 预解析器完成。