浏览器解析过程

当浏览器加载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. #Powerquery pq从入门到精通,笔记梳理

    详细视频可以B站搜索,ms_excel博主,看leila的视频翻译课,powerquery从入门到精通. 后续也会根据自己工作来更新这部分的实际用法.

  2. 2020-08-21:网络IO模型有哪些?

    福哥答案2020-08-21: 福哥口诀法:阻非复信异(阻塞.非阻塞.多路复用.信号驱动.异步) [知乎答案](https://www.zhihu.com/question/416128059)操作系 ...

  3. 2021-08-10:给定一个正数数组arr,返回arr的子集不能累加出的最小正数。1)正常怎么做? 2)如果arr中肯定有1这个值,怎么做?

    2021-08-10:给定一个正数数组arr,返回arr的子集不能累加出的最小正数.1)正常怎么做? 2)如果arr中肯定有1这个值,怎么做? 福大大 答案2021-08-10: 先排序,然后扩充ra ...

  4. 2021-09-07:单词接龙 II。按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s1 -

    2021-09-07:单词接龙 II.按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的 转换序列 是形式上像 beginWord -> s ...

  5. prefetch_related() 一对多、多对多查询优化,反向查询

    prefetch_related() 一对多.多对多查询优化,反向查询 Student.objects.filter(age__lt=30).prefetch_related('course') # ...

  6. SVM主体思路和代码实现

    之前学习的KNN算法属于直接将所有的训练图片数据化,根据图片的像素值进行判断,最简单的NN算法是用与待判断图片的差距最小(距离最近)的那张图片的类别当做此图片的类别,我们不难看到,1NN算法的正确性很 ...

  7. 为teamcity的代码语法检查工具pyflakes增加支持python2和python3

    TeamCity和pyflakes TeamCity是一款由JetBrains公司开发的持续集成和部署工具,它提供了丰富的功能来帮助团队协作进行软件开发.其中包括代码检查.自动化构建.测试运行.版本控 ...

  8. python利用subprocess执行shell命令

    subprocess以及常用的封装函数 运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序.在Python中 ...

  9. 基于飞桨paddlespeech训练中文唤醒词模型

    飞桨Paddlespeech中的语音唤醒是基于hey_snips数据集做的.Hey_snips数据集是英文唤醒词,对于中国人来说,最好是中文唤醒词.经过一番尝试,我发现它也能训练中文唤醒词,于是我决定 ...

  10. 如何使用Stable Diffusion生成艺术二维码?

    硬件准备 物理内存:至少16G(8G直接安装阶段就卡死) N卡:此处我使用GTX 1660 6G (2019年双12购买) 操作系统 windows 11 软件准备 网络要通畅 git: https: ...