浏览器解析过程

当浏览器加载html资源时,会进行如下的解析过程

  • 遇见 HTML 标记,构建 DOM 树
  • 遇见 style/link 标记调用相应解析器处理CSS标记,并构建出CSS样式树
  • 遇见 script 标记 调用javascript引擎 处理script标记、绑定事件、修改DOM 树/CSS树等
  • 将 DOM树 与 CSS树 合并成一个渲染树
  • 根据渲染树来渲染,以计算每个节点的几何信息
  • 最终将各个节点绘制到屏幕上

用一张非常经典的图来表示

浏览器引擎

浏览器引擎分为两部分,渲染引擎和js引擎。

  • 渲染引擎用于解析、处理html、css文件、布局绘制
  • JavaScript引擎用于解析js文件,常见的JavaScript引擎有JavascriptCore、V8

我们知道,javascript是一门高级语言,它需要通过编译才能被计算机识别,那么编译的这个过程就由V8引擎来完成

V8引擎

V8处理JS文件经过以下几个步骤

1、Parser模块反对Javascript代码进行词法分析,解析成AST(抽象语法树)

AST的生成如下图所示,定义一个名为name的常量,解析成右边的树结构



这样所有的代码的结构都非常统一,便于处理

2、Ignition将AST解析成bytecode(字节码),最后根据不同的操作系统/环境编译成计算机可识别的机器码

比如windows/macos,cpu架构不一致所能执行的机器指令是不一样的,字节码可以跨平台,等到执行的时候,V8引擎再将字节码解析成机器码

3、Ignition收集优化信息,通过Turbofan将bytecode编译成机器码

如果一个函数会被多次执行,AST-->bytecode-->机器码这样的过程比较浪费性能,为了进行优化,会标记此函数为热点函数,此时Ignition会收集优化信息,如函数的参数,这样直接通过Turbofan将字节码编译成机器码。

如果优化信息发生的变化,比如函数入参的类型一直是 number,突然变成了string,这时候Turbofan会将机器码反向的编译成字节码,再同Iginition解析成机器码执行。

图示如下

Parser模块

Parser模块解析成AST的过程中还经过了以下步骤

  • Blink(Chrome浏览器内核)将源码交给V8引擎,Stream进行编码转换
  • Scanner进行词法分析后,将代码转成token
  • PreParser(预解析),如果函数没有调用则不会被解析
  • Parser模块解析成AST
  • Ignition、Toburfan再解析

图示如下

浏览器工作原理及V8引擎的更多相关文章

  1. 深入浏览器工作原理和JS引擎(V8引擎为例)

    浏览器工作原理和JS引擎 1.浏览器工作原理 在浏览器中输入查找内容,浏览器是怎样将页面加载出来的?以及JavaScript代码在浏览器中是如何被执行的? 大概流程可观察以下图: 首先,用户在浏览器搜 ...

  2. 《浏览器工作原理与实践》<10>作用域链和闭包 :代码中出现相同的变量,JavaScript引擎是如何选择的?

    在上一篇文章中我们讲到了什么是作用域,以及 ES6 是如何通过变量环境和词法环境来同时支持变量提升和块级作用域,在最后我们也提到了如何通过词法环境和变量环境来查找变量,这其中就涉及到作用域链的概念. ...

  3. 《浏览器工作原理与实践》 <12>栈空间和堆空间:数据是如何存储的?

    对于前端开发者来说,JavaScript 的内存机制是一个不被经常提及的概念 ,因此很容易被忽视.特别是一些非计算机专业的同学,对内存机制可能没有非常清晰的认识,甚至有些同学根本就不知道 JavaSc ...

  4. 《浏览器工作原理与实践》<07>变量提升:JavaScript代码是按顺序执行的吗?

    讲解完宏观视角下的浏览器后,从这篇文章开始,我们就进入下一个新的模块了,这里我会对 JavaScript 执行原理做深入介绍. 今天在该模块的第一篇文章,我们主要讲解执行上下文相关的内容.那为什么先讲 ...

  5. 《浏览器工作原理与实践》<01>Chrome架构:仅仅打开了1个页面,为什么有4个进程?

    无论你是想要设计高性能 Web 应用,还是要优化现有的 Web 应用,你都需要了解浏览器中的网络流程.页面渲染过程,JavaScript 执行流程,以及 Web 安全理论,而这些功能是分散在浏览器的各 ...

  6. 《浏览器工作原理与实践》<11>this:从JavaScript执行上下文的视角讲清楚this

    在上篇文章中,我们讲了词法作用域.作用域链以及闭包,接下来我们分析一下这段代码: var bar = { myName:"time.geekbang.com", printName ...

  7. 《浏览器工作原理与实践》<09>块级作用域:var缺陷以及为什么要引入let和const?

    在前面我们已经讲解了 JavaScript 中变量提升的相关内容,正是由于 JavaScript 存在变量提升这种特性,从而导致了很多与直觉不符的代码,这也是 JavaScript 的一个重要设计缺陷 ...

  8. 《浏览器工作原理与实践》<08>调用栈:为什么JavaScript代码会出现栈溢出?

    在上篇文章中,我们讲到了,当一段代码被执行时,JavaScript 引擎先会对其进行编译,并创建执行上下文.但是并没有明确说明到底什么样的代码才算符合规范. 那么接下来我们就来明确下,哪些情况下代码才 ...

  9. 《浏览器工作原理与实践》<06>渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?

    在上篇文章中,我们介绍了渲染流水线中的 DOM 生成.样式计算和布局三个阶段,那今天我们接着讲解渲染流水线后面的阶段. 这里还是先简单回顾下上节前三个阶段的主要内容:在 HTML 页面内容被提交给渲染 ...

  10. 《浏览器工作原理与实践》<05>渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的?

    在上一篇文章中我们介绍了导航相关的流程,那导航被提交后又会怎么样呢?就进入了渲染阶段.这个阶段很重要,了解其相关流程能让你“看透”页面是如何工作的,有了这些知识,你可以解决一系列相关的问题,比如能熟练 ...

随机推荐

  1. 2022-09-28:以下go语言代码输出什么?A:1 1;B:1 2;C:2 2;D:不确定。 package main import ( “fmt“ ) func main() { var

    2022-09-28:以下go语言代码输出什么?A:1 1:B:1 2:C:2 2:D:不确定. package main import ( "fmt" ) func main() ...

  2. @csrf_exempt

    在Django中对于基于函数的视图我们可以 @csrf_exempt 注解来标识一个视图可以被跨域访问.那么对于基于类的视图,我们应该怎么办呢? 简单来说可以有两种访问来解决 方法一:在类的 disp ...

  3. asp.net WebApi JWT

    文章转自 https://blog.csdn.net/liwan09/article/details/83820651 参考资料: https://docs.microsoft.com/en-us/a ...

  4. nginx 反向代理proxy_pass 后加斜杠和不加斜杆的区别

    今日准备使用nginx 将上次使用docker 部署的一个vue项目进行地址代理,让他看起来高达尚一点,原本docker打包的镜像只是向外暴露了一个8191的端口,访问的时候就只能是 http://w ...

  5. .Net Aspose.Words 生成Word文档

    .Net Aspose.Words 生成Word文档 在开发WinForm项目中,有一需求要生成Word文档,百度学习,记录一下实现方法 NuGet包,找到 Aspose.Words 安装 21.8. ...

  6. DOS系统中EXE程序加载过程

    1.在内存区中寻找一段容量足够的空闲内存区. 2.这段内存区的前256字节中,创建一个称为程序段前缀(PSP)的数据区. 3.这段内存区256字节之后,将程序装入,程序的地址被设为SA+10H : 0 ...

  7. JavaWeb编程面试题——Spring Web MVC

    引言 面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待.不以刷题进大厂为目的,而是以学习为目的.这里的知识点会持续更新,目录也会随时进行调整. 关注公众号:编 ...

  8. 在Istio中,到底怎么获取 Envoy 访问日志?

    Envoy 访问日志记录了通过 Envoy 进行请求 / 响应交互的相关记录,可以方便地了解具体通信过程和调试定位问题. 环境准备 部署 httpbin 服务: kubectl apply -f sa ...

  9. 尚医通day11-Java中阿里云对象存储OSS

    页面预览 用户认证 用户登录成功后都要进行身份认证,认证通过后才可以预约挂号. 认证过程:用户填写基本信息(姓名.证件类型.证件号码和证件照片),提交平台审核 用户认证相关接口: (1)上传证件图片 ...

  10. IDEA的安装准备

    IDEA的安装 第一步 第二步 第三部 第四步