文档渲染机制

文档渲染机制

浏览器的渲染机制一般分为以下几个步骤

1.处理html,并构建DOM树

2.构建css构建cssom树

3.将DOM树和CSSOM合成一个渲染书

4.根据渲染树来布局,计算每个节点的位置

5.调用GPU绘制,合成图层,显示在屏幕上

bf5b422eee02a3cce39246108481842d133.jpg

ps:先搞DOM在搞cssom,然后两者合并,在计算位置,再合成图层

css的阻塞

在构建css树时,会阻塞渲染,直至csss树构建完成,并且构建cssom树是一个十分消耗性能的过程,所以应该尽量保证层级扁平,减少过度层叠,越是具体的css选择器,执行速度越慢

js阻塞

当html解析到script标签的时候,会暂停构建dom树,完成后才会重暂停的地方重新开始,也就是说你要首屏加载的越快,就不应该在首屏加载js文件,并且css也影响了js的执行,只用当css样式表才会执行js

ps: html=>css=>js

图层

一般来说可以把普通文档流看成一个图层.特定的属性可以生成一个新的图层,不同的图层渲染互不影响,所以对那些频繁渲染的建议单独生成一个图层,提高性能

通常以下几个属性可以生成图层

a.3D变换:translate3d,translatez

b.will-change

c.video,iframe 标签

d.通过动画实现opacity动画转换

e.position:fixed

重绘(Repaint)和回流(Reflow)

重绘:不影响布局 如color

回流:布局或者几何属性要改变

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

以下几个动作可能会导致性能问题:

1.改变window大小

2.改变字体大小

3.添加或删除样式

4.文字改变

5.定位或者浮动

6.和模型

重绘和回流其实和Event loop 有关

  • 当Event loop执行完microtsks后 会判断document是否需要更新.因为浏览器是60hz的刷新,没16ms才会更新一次

  • 然后判断是否有resize或者是scroll,有的话会促发事件

  • 判断是否促发了media query

  • 更新动画并且发送事件

  • 判断是否有全屏操作事件

  • 执行 requestAnimationFrame 回调

  • 执行 IntersectionObserver 回调,该方法用于判断元素是否可见,可以用于懒加载上,但是兼容性不好

  • 更新界面

  • 以上就是一帧中可能会做的事情。如果在一帧中有空闲时间,就会去执行 requestIdleCallback 回调。

 

 

转载于:https://my.oschina.net/u/4004801/blog/3008266

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值