详细介绍下回流与重绘(面试总结)


首先我们先了解下浏览器的渲染机制:

1.浏览器采用的是流式布局模型
2.浏览器在解析过程中会将html解析成DOM,然后再把css解析成为CSSOM,CSSOM和DOM结合成为了render tree
3.在有了render tree之后,我们就知道了节点样式,然后浏览器会计算出每个节点的位置,在把每个节点绘制(渲染)到页面上

先简单介绍一下
比如,我们给某个div设置上了白色,然后经过一些操作,我们使这个div的颜色变成了其他颜色,因为这个过程这个div的大小没有变,我们只是将这个div的颜色重新绘制了一下,所以这个过程就叫做重绘
因为浏览器采用的使流式布局,在我们将在某个位置的div移到另一个位置,又因为这个div的位置变了,那么除这个div之外的其他的标签节点的位置也会跟着改变,这种变化就叫做回流
总结:回流一定会引起重绘,但是重绘不一定会引起回流

回流

当我们render tree中的某些元素的结构或尺寸等发生改变,浏览器会重新渲染部分或者全部文档的这个过程就叫做回流。
一下是会导致回流的操作:

  • 页面首次渲染(在页面首次渲染的时候必然是一次回流,首先这个节点的位置还没有确定,在首次渲染的时候这些元素一定是会变的,所以是引起了一次回流)
  • 浏览器窗口的大小发生变化(现在很多页面的大小都是会随着浏览器的放大缩小而产生变化,在这个过程中也会引起回流)
  • 内容的变换(比如,我们的验证码按钮的功能,在发送验证码之前,我们的button按钮中的内容是’发送验证码‘,在我们点击发送验证码之后,这个button按钮的内容就会编程一个倒计时,在这个过程也会引起回流)
  • 添加或者删除节点
  • 激活css伪类
  • clinentWidth(获取窗口)

重绘

当页面中元素样式的改变不影响它在文档流中的位置,浏览器会将新样式赋给这个元素,这个过程就叫做重绘。
一下是会导致重绘的操作:

  • background(控制元素的背景样式)
  • visibility(控制元素的透明度)

回流和重绘对性能的影响

总结:回流的性能消耗要不重绘大。
回流和重绘都会对性能产生影响只是大小不同罢了

在我们知道回流和重绘会对性能造成影响后应该怎么避免呢?

如何避免回流和重绘对性能造成的影响

能重绘尽量不使元素回流
首先从css开始:

  • 避免使用table布局(在浏览器渲染页面时,因为table是一个元素,table里面含有很多的标签,比如th,tr,td等标签元素,浏览器会先对table以及table里面的所有标签全部计算完之后,才会进行后面的其他标签的计算,在这个等待的过程中用户体验是及其不好的)
  • 避免设置多层内联样式
    JavaScript:
  • 避免频繁操作DOM
  • 对于大量插入DOM的操作,建议使用文档片段,也就是documentFragment。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值