浏览器是如何运作的

浏览器发展史

在这里插入图片描述

进程与线程

在这里插入图片描述

进程描述

很多应用都是多进程结构,每个进程分配独立的内存空间
进程之间依靠通信管道IPC进行通讯

每个进程独立操作并不会影响其他进程
在这里插入图片描述

浏览器的进程

现在的浏览器一般有很多进程 独立的负责自己的模块
浏览器一般会给每个标签页都开启一个进程

在这里插入图片描述

步骤

输入URL

浏览器通过ui线程判断是否为地址:
如果是则DNS解析然后通过网络请求地址数据
如果不是则利用默认配置的搜索引擎来进行查询

在这里插入图片描述

safebrowsing检测是否安全

网络线程获取数据后,先通过safebrowsing检测当前网站是否安全
如果是则展示一个警告界面(通过数据类似谷歌黑名单来判断是否安全)

在这里插入图片描述

创建渲染器进程

当文件准备ok后网络线程会通知UI线程
UI线程会创建一个渲染器进程,然后将数据通过IPC管道传给渲染器进程

在这里插入图片描述

DOM树构建

1. 通过tokeniser将输入的内容解析成多个标记
2. 根据识别标记进行DOM数构造
3. 构造中会创建document对象
4. 以document为根节点 向其中不断添加元素
5. js为单进程遇到js调用修改dom树则会重新回到tokeniser步骤

在这里插入图片描述

确定节点样式

默认css以及外部css
在这里插入图片描述

生成layoutTree

layoutTree每一个节点都记录的元素的坐标以及边框尺寸
dom树与layout树并不是一一对应的
如下图(css实现的样式要么没有要么多)

在这里插入图片描述

控制绘制顺序(解决类似z-index)

主线程遍历layoutTree创建一个绘制记录表(PaintRecord)
在这里插入图片描述

栅格化

将其转化为像素点显示到屏幕上
早期栅格化(类似懒加载)
在这里插入图片描述

新式栅格化方案

  1. 将页面的各个部分分成多个图层
  2. 分别对其进行栅格化
  3. 在合成器页面单独进行合成页面
  4. 将所有的页面分图层栅格化好
  5. 将用户需要的部分组合成一帧即可
    在这里插入图片描述

栅格过程中将整个图块切分成很多小线程来做
在这里插入图片描述
将栅格后的图块放入GPU中 栅格化结束后将栅格后小图块的地址信息以及页面中哪里绘制返回给合成器线程(DrawQuads)
再根据这些图块生成一个合成器帧通过IPC传给浏览器进程
在这里插入图片描述
再将其传给GPU展示到屏幕上 (如果滚动页面则会重新生成合成器帧给GPU)
在这里插入图片描述

总结

  1. 浏览器网络进程获取数据
  2. 通过IPC将数据床给渲染器进程的主线程
  3. 主线程将html解析构造DOM树
  4. 样式计算=》生成layoutTree=》生成绘制表=》生成layer tree
  5. 主进程将这些信息传给合成器线程
  6. 合成器线程通过分图层并将更小的图块床给栅格进程来进行栅格化
  7. 栅格结束后 合成器线程接收到drawquals信息(绘制位置及内存位置)
  8. 合成器线程合成了一个合成器帧
  9. 再将其床给浏览器进程=》GPU渲染
  10. over
    在这里插入图片描述

tips

一、

当我们改变一个元素的尺寸位置时,会重新进行样式计算(重排)-重新进行layout paint以及后面的流程
改变颜色属性 不会重新出发布局但是 也需要触发样式计算和绘制(重绘)
重排重绘都会占用主线程(js也用)
所以不断重排重绘动画其中穿插js并且js没有及时归还主线程则会导致页面的卡顿

该API可以解决 (将js分成小块来进行执行)
在这里插入图片描述
在这里插入图片描述
二、
栅格化的整个流程是不占用主线程的
CSS的transform不占用主线程,该属性动画不会重新绘制、直接运行在合成器线程和栅格化线程中
同时也减少了很多js计算时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值