当前位置: 首页 > news >正文

CSS的重绘和重排是什么?如何减少css的重绘和重排?

一.理解重排与重绘

要理解重排和重绘,需要先了解浏览器渲染步骤:构建DOM树、构建CSSOM树、合成渲染树、布局(Layout,即重排)、绘制(Paint,即重绘)。

  • 重排 (Reflow / Layout)​

    当渲染树中元素的尺寸、布局、位置或内容发生改变,导致浏览器需要重新计算所有受影响元素的几何属性(位置和大小),并更新整个渲染树的过程,就是重排。重排的范围可能很大,从当前元素向上定位祖先,向下所有子节点都可能被波及。

  • 触发重排的常见操作包括:改变窗口大小、更新元素内容、调整CSS盒模型相关属性(如宽度、高度、边距)、操作DOM(添加或删除可见元素)、读取某些属性(如offsetTopclientHeight等)。

  • 重绘 (Repaint)​

    当元素的样式发生改变,但不影响其布局​(例如修改颜色、背景色、边框颜色、可见性visibility等),浏览器只需重新绘制元素的外观到屏幕,这个过程就是重绘。

  • 由于跳过了计算布局的阶段,​重绘的性能开销通常远小于重排​。

两者的核心关系是:​重排必定会触发重绘,因为布局改变后外观需要更新;但重绘不一定触发重排,如果只是视觉变化而布局未变

二.🛠️ 优化策略与实用技巧

减少重排和重排的关键在于尽量减少对渲染树的干扰,并将不可避免的操作的影响降至最低

  • 合并DOM操作

    避免逐条修改样式或频繁操作DOM。最有效的方法是集中修改​:

    • 使用cssTextclassList​:一次性设置多个样式属性,或通过切换预定义的CSS类来批量改变样式。

    • 使用文档片段DocumentFragment​:需要对DOM进行多次添加或删除时,先在内存中的DocumentFragment上操作,最后一次性将片段添加到真实DOM中。

  • 优化动画与变换

    动画会频繁触发渲染,优化至关重要:

    • 优先使用transformopacity​:这两个属性实现的动画通常由合成层处理,​跳过布局和绘制阶段,直接由GPU合成,效率极高。

    • 应用position: absolutefixed​:为动画元素设置绝对或固定定位,可使其脱离普通文档流,动画变化时减少对其他元素的影响范围​。

    • 使用requestAnimationFrame​:而非setTimeoutsetInterval来执行动画,确保动画回调在浏览器下一次重绘前执行,更流畅。

  • 谨慎访问布局属性

    在JavaScript中读取offsetTopscrollHeightgetComputedStyle()等布局属性时,浏览器为返回精确值可能强制刷新渲染队列,导致同步重排。

  • 应在一次读取中缓存这些值,避免在循环或频繁调用的函数中重复读取。

  • 优化CSS与选择器

    • 避免过于复杂的选择器​:特别是深层嵌套的选择器,会增加浏览器匹配样式的时间。

    • 避免使用table布局​:table中某个小改动可能导致整个表格重排。

    • 减少使用可能高开销的属性​:如box-shadowfilter,尤其在多个元素上使用时。

http://www.dtcms.com/a/465926.html

相关文章:

  • 哪个网站可以做专业兼职程序员用的编程软件
  • 国内云服务器免费优化培训学校
  • Linux多进程:查看当前哪个进程正在使用共享数据区的互斥锁文件
  • 【MySQL SQL语句实战】设计表,建表语句,数据插入,实战案例包括:简单查询、汇总统计、分组分析、多表关联、窗口函数
  • 系统设计-高频面试题(更新中...)
  • IntelliJ IDEA使用经验(十五):SQL脚本文件转为数据库控制台
  • 【实时Linux实战系列】内核跟踪点(Tracepoints)与用户态探针(UST)的协同调试
  • Linux 进程通信——消息队列与信号量
  • 备案ip 查询网站查询网站小说一键生成动漫
  • 做养生产品哪个网站好嘉兴网站建设网址
  • Vue3中实现全局双向绑定变量
  • C语言数据结构-排序
  • 【三维重建-对极几何】极线约束(Epipolar Constraint)
  • LeetCode算法日记 - Day 68: 猜数字大小II、矩阵中的最长递增路径
  • WSL 安装与卸载
  • app和微网站的对比河源网站建设
  • 新乡网站建设哪家好备案 网站名称
  • 版本控制器 git(5)--- git 标签管理
  • BShare HTTPS 集成与排查实战,从 SDK 接入到 iOS 真机调试(bshare https、签名、回调、抓包)
  • 基于同步压缩连续小波变换(SS-CWT)的微震图像去噪与起始检测
  • 太原网站建设工作室wordpress的内链插件
  • 简述网站开发流程 旅游做网站送邮箱
  • 湖北省住房建设厅网站网站备案登记查询系统
  • uri: mongodb://jack:123456@localhost://27017 数据库访问其他的写法
  • 在K8s中,seaweedFS 和 Longhorn 的比较
  • 146、【OS】【Nuttx】【周边】效果呈现方案解析:特殊变量$
  • 实现流水灯
  • 培 网站建设方案 doc台州seo网站推广
  • vue前端面试题——记录一次面试当中遇到的题(3)
  • Vuex的工作流程