重排(回流)和重绘
重排(Reflow):
元素的位置发生变动时发生重排,也叫回流
。此时在关键渲染路径(浏览器将html,css和js转换为屏幕上的像素所经历的步骤序列)中的 Layout 阶段,计算每一个元素在设备视口内的确切位置和大小。当一个元素位置发生变化时,其父元素及其后边的元素位置都可能发生变化,代价极高
重绘(Repaint):
元素的样式发生变动,但是位置没有改变。此时在关键渲染路径中的 Paint 阶段,将渲染树中的每个节点转换成屏幕上的实际像素,这一步通常称为绘制或栅格化
重绘不一定会出现重排,重排必然会触发重绘
如何触发重排和重绘
任何改变用来构建渲染树的信息都会导致一次重排或重绘:
添加,删除,更新dom节点
通过display: none隐藏一个DOM节点-触发重排和重绘
通过visibility: hidden隐藏一个DOM节点-只触发重绘,因为没有几何变化
用户行为,例如调整窗口大小,改变字号或滚动。
如何减少重排和重绘
减小重排范围:脱离文档流(使用absolute或fixed脱离文档流)
减少重绘次数:合并样式修改
http://cjjjx.github.io/2023/12/09/%E9%87%8D%E6%8E%92-%E5%9B%9E%E6%B5%81-%E5%92%8C%E9%87%8D%E7%BB%98/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CJJJX's BLOG!