浏览器工作原理

原文链接:https://www.yuque.com/yunshang-twlfu/isvgha/osw2u7

渲染过程-显示引擎

一、总过程

解析html文本,把标记解析成dom树。同时解析css得到标记和样式信息,组成呈现树。然后开始布局,分配每个节点应该出现在哪个坐标。最后遍历呈现树,绘制节点在界面上。

 

需要了解的chrom的工作原理主要有:

1、网络进程

2、js执行

3、渲染进程

4、web安全

 

扩展:

进程和线程,见操作系统。简单来说: 进程可以有多个线程,进程的一个线程挂掉整个进程会挂掉,进程与进程之间不影响。线程之间可以共享进程的数据,线程不能单独存在,需要进程管理。

 

浏览器发展:

1、单进程浏览器:

页面渲染,js执行都在一个进程,同一个时间只有一个模块可以执行,所以不流畅;插件容易崩溃,导致进程崩溃,只有一个进程的浏览器崩溃,所以不稳定; 插件容易获取控制到浏览器、电脑。

2、多进程浏览器:

目前的浏览器有多个渲染进程、多个插件进程、浏览器主进程、网络进程、GPU进程。进程运行在沙箱中,不能获取操作权限,硬盘数据。缺点:架构复杂,资源占用大。

 

GPU进程?

 

 

导航流程-从输入url到页面显示的过程:

1、输入url,回车:检查url,添加协议(举例:http1.1)

2、网络进程:检查当前资源是否已经请求过,如果是,则使用本地缓存。拦截请求

3、如果没有本地缓存的资源,则通过dns解析出ip地址和端口。这里也会看本地dns缓存有没有解析过当前url。如果有则不用请求dns系统查找域名和ip地址的映射关系。http的默认端口是80.。

4、建立tcp连接,浏览器对同一个域名维持6个tcp连接,超过需要等待。服务端返回响应头可以设置长连接:connection:keep-live告诉浏览器保持同一个连接发起请求。如果需要重定向,服务端响应头设置location字段,写出重定向的地址。如果要缓存数据:响应头设置cache-control字段

5、数据传输完成断开连接或者保持连接

6、渲染进程资源解析:

7、绘制

 

html语义化

什么是语义化:内容意义用具体的的标签展示。

有哪些语义化标签: 结构上,header,nav,section,aside,footer,article 内容上: img、ul、ol、a

非语义化标签:div span

为什么要语义化:1、被浏览器抓取到重要内容和有效信息。2、css被阻塞挂掉的时候,页面的内容、结构还能保持较为清晰。3、代码易于察看和维护, 4、被特别的设备解析

二、呈现树

在构建dom树的同时还会构建呈现树,呈现树是带样式信息,是有显示顺序的,所以构建呈现树需要计算每个节点的样式。

样式来源有:每个浏览器的默认样式,外部样式表,行内样式。

 

呈现树和dom树的区别与联系

或者可以理解为呈现树是dom树的可视化表现??但是呈现树和dom树不是一一对应的,例如浮动定位和绝对定位的元素,因为在正常的文档流之外。

 

样式计算:

1、选择器:根据选择器划分到不同的哈希表,例如id表,类表,标记名称表......根据标记的属性到对应的表获取样式规则。

 

2、层叠顺序:次序低到高

  1. 浏览器声明
  2. 用户普通声明
  3. 作者普通声明
  4. 作者重要声明
  5. 用户重要声明

 

需要注意的是呈现树没有计算位置和大小。结点位置、大小的计算过程叫做重排 || 布局。

三、布局/重排

计算位置和大小

大小的话主要是宽度的计算

定位

定位的方式

层叠

从第三维度,即分为图层。

 

四、绘制

在绘制阶段,系统会遍历呈现树,并调用呈现器的“paint”方法,将呈现器的内容显示在屏幕上。

绘制工作是使用用户界面基础组件完成的。

 

拓展:

css选择器的权重高到低:

1、加了important的样式

2、行内样式 1000

3、id选择器 100

4、类选择器、伪类元素、伪类选择器10

5、元素、伪元素 1

6、通配符* 0

子类、相邻选择器会被拆开

资源解析

一、HTML解析

1、标记化解析html

html是上下文相关文法(上下文无关文法见编译原理)

对html内容进行词法分析,解析成标记(起始标记、结束标记、属性名、属性值)

解析过程-示例:

<html>
  <body>
    Hello world
  </body>
</html>

以状态机的状态计算变化来发出标记。

初始状态是数据状态。遇到字符 < 时,状态更改为“标记打开状态”。接收一个 a-z 字符会创建“起始标记”,状态更改为“标记名称状态”。这个状态会一直保持到接收 > 字符。在此期间接收的每个字符都会附加到新的标记名称上。在本例中,我们创建的标记是 html 标记。

遇到 > 标记时,会发送当前的标记&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值