重绘和回流(Repaint & Reflow),以及如何进行优化

本文详细介绍了浏览器渲染过程中回流与重绘的概念,阐述了何时会发生这两种操作,并列举了如字体变化、元素尺寸调整等触发因素。浏览器会通过队列方式批量处理这些操作以提高效率。同时,文章提出了优化建议,包括避免频繁DOM操作、减少使用影响布局的属性,以及利用缓存避免重复计算等。优化浏览器渲染对于提升网页性能至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。

浏览器引起回流的操作:

  • 字体大小变化
  • 元素尺寸、位置发生变化
  • 增加或者删除可见的元素
  • 激活伪类属性
  • 访问某些位置信息
    注:浏览器会维护一个队列,把所有引起回流和重绘的操作放入队列中,如果队列中的任务数量或者时间间隔达到一个阈值的,浏览器就会将队列清空,进行一次批处理,这样可以把多次回流和重绘变成一次。因为队列中可能会有影响到这些属性或方法返回值的操作,即使你希望获取的信息与队列中操作引发的改变无关,浏览器也会强行清空队列,确保你拿到的值是最精确的。
  • clientWidthclientHeightclientTopclientLeft
  • offsetWidthoffsetHeightoffsetTopoffsetLeft
  • scrollWidthscrollHeightscrollTopscrollLeft
  • scrollIntoView()scrollIntoViewIfNeeded()
  • getComputedStyle()
  • getBoundingClientRect()
  • scrollTo()

2.当页面中元素样式的改变并不影响它在文档流中的位置时(例如:colorbackground-colorvisibility等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重绘。

回流一定引起重绘,重绘不一定引起回流;

3.优化

css :

  • 避免使用css表达式(calc())
  • 避免使用table 布局
  • 避免 使用层级很深的层连选择器
  • 动画应用在 position 为  fixed 或 absolute

js:

避免 频繁的操作dom 样式

避免增加删除元素

避免频繁的访问 引起回流的属性,如果一定要用,也要 用变量缓存起来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值