浏览器解析、渲染页面

2 篇文章 0 订阅
1 篇文章 0 订阅
浏览器解析HTML文档构建DOM树,解析CSS生成CSSOM规则树,随后结合生成渲染树。渲染过程中涉及回流与重绘,回流影响布局,重绘仅影响外观。JS文件加载会阻塞文档解析,为提升首屏渲染速度,常将script标签置于body底部或使用defer/async属性。
摘要由CSDN通过智能技术生成

目录

过程

其他相关内容

回流和重绘

渲染 过程遇到图片或 JS 文件怎么处理


过程

(1)首先解析收到的文档,根据文档定义构建一棵 DOM 树,DOM 树是由 DOM 元素及属性节点

         组成的。

(2)然后对 CSS 进行解析,生成 CSSOM 规则树。

(3)根据 DOM 树和 CSSOM 规则树构建渲染树。渲染树的节点被称为渲染对象,渲染对象是一

         个包含有颜色和大小等属性的矩 形,渲染对象和 DOM 元素相对应,但这种对应关系不是一

         对一的,不可见的 DOM 元素不会被插入渲染树。还有一些 DOM 元素对应几个可见对象,

         它们一般是一些具有复杂结构的元素,无法用一个矩形来描述。

(4)当渲染对象被创建并添加到树中,它们并没有位置和大小,所以当浏览器生成渲染树以后,

         就会根据渲染树来进行布局(也可以叫做回流)。这一阶段浏览器要做的事情是要弄清楚各

         个节点在页面中的确切位置和大小。通常这一行为也被称为“自动重排”。

(5)布局阶段结束后是绘制阶段,遍历渲染树并调用渲染对象的 paint 方法将它们的内容显示在

         屏幕上,绘制使用 UI 基础组件。

值得注意的是,这个过程是逐步完成的,为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的 html 都解析完成之后再去构建和布局 render 树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其 余内容。

其他相关内容

回流和重绘

回流必定会发生重绘,重绘不一定会引发回流

  • 重绘:当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观、风格,而不会影响布局的,比如background-color。
  • 回流:当render tree中的一部分(或全部)因为元素的规模尺寸、布局、隐藏等改变而需要重新构建

渲染 过程遇到图片或 JS 文件怎么处理

以遇到 JS 文件为例(遇到图片时的处理方式与遇到 JS 文件的处理方式相同):

JavaScript 的加载、解析与执行会阻塞文档的解析,也就是说,在构建 DOM 时,HTML 解析器若遇到了JavaScript,那么它会暂停文档的解析,将控制权移交给 JavaScript 引擎,等 JavaScript 引擎运行完毕,浏览器再从中断的地方恢复继续解析文档。

注:也就是说,如果你想首屏渲染的越快,就越不应该在首屏就加载 JS 文件,这也是都建议将 script 标签放在 body 标签底部的 原因。当然在当下,并不是说 script 标签必须放在底部,因为你可以给 script 标签添加 defer 或者 async 属性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值