浏览器渲染原理

浏览器渲染大体分为五个步骤:

1. 处理HTML标记并构建DOM(Documen Object Model) Tree

2. 处理CSS标记并构建CSSOMCSS Object ModelTree,(称之为CSS 规则树)

3. DOM树和CSS规则树合并成为一个渲染树(Rendering Tree

4. 根据渲染树进行布局,以计算每个节点的几何信息

5. 将各个节点绘制到屏幕上

 

阻塞渲染:CSSJavascript

(渲染树由DOMCSSOM共同构建,故意味着浏览器在将CSSOM构建完成前,不会完成渲染树的构建: CSS被视为阻塞渲染的资源)

存在阻塞的 CSS 资源时,浏览器会延迟 JavaScript 的执行和 DOM 构建。另外:

1.当浏览器遇到一个 script 标记时,DOM 构建将暂停,直至脚本完成执行。

2.JavaScript 可以查询和修改 DOM CSSOM

3.CSSOM 构建时,JavaScript 执行将暂停,直至 CSSOM 就绪。

 

Reflow——意味着元件的几何尺寸变了,我们需要重新验证并计算 Render Tree。是 Render Tree 的一部分或全部发生了变化。这就是 Reflow,或是 Layout。(HTML 使用的是 flow based layout,也就是流式布局,所以,如果某元件的几何尺寸发生了变化,需要重新布局,也就叫 reflowreflow 会从 <html> 这个 root frame 开始递归往下,依次计算所有的结点几何尺寸和位置,在 reflow 过程中,可能会增加一些 frame,比如一个文本字符串必需被包装起来。

Repaint——屏幕的一部分要重画,比如某个 CSS 的背景色变了。但是元素的几何尺寸没有变。

Reflow 的成本比 Repaint 的成本高得多的多。DOM Tree 里的每个结点都会有 reflow 方法,一个结点的 reflow 很有可能导致子结点,甚至父点以及同级结点的 reflow

所以,下面这些动作有很大可能会是成本比较高的。

· 当你增加、删除、修改 DOM 结点时,会导致 Reflow Repaint

· 当你移动 DOM 的位置,或是搞个动画的时候。

· 当你修改 CSS 样式的时候。

· 当你 Resize 窗口的时候(移动端没有这个问题),或是滚动的时候。

· 当你修改网页的默认字体时。

  注:display:none 会触发 reflow,而 visibility:hidden 只会触发 repaint,因为没有发现位置变化。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值