
六、“重排”“重绘”和“合成”
发布日期:2021-05-14 15:28:38
浏览次数:26
分类:精选文章
本文共 1028 字,大约阅读时间需要 3 分钟。
理解重排与重绘及优化方法
Reynolds
在阅读关于CSS重排与重绘的文章后,我对这些概念有了更深的理解,同时也掌握了优化方法。以下是我整理的重点内容和思考过程。
重排与重绘概述
重排(Layout Refesh)
- 修改元素的几何属性(如宽度、高度、位置等)会触发重排。这一过程会重新计算布局树,导致整体布局发生变化。重排资源消耗较大,因为涉及布局树、分层树以及文备资源的刷新。
重绘(Repaint)
- 修改元素的绘图属性(如背景颜色、字体样式等)会触发重绘。布局树不会重建,只有绘图树会被刷新。这一过程效率高于重排,但仍旧占用主线程资源。
合成(Composite)
- 对于不需要布局和绘制改变的属性修改,浏览器会直接进入合成阶段,只处理后续复合操作。这种优化能够大幅提升性能,尤其是在使用CSS transform进行非主线操作时。
优化方法
为了减少重排与重绘带来的性能开销,以下方法可以有效优化:
使用CSS类操作样式
- 将样式集中管理,避免频繁修改内联样式,减少重绘的触发次数。
避免使用表格布局
- 表格及其内元素在布局时需要多次计算,增加了重排开销。
批量操作DOM
- 利用createDocumentFragment或框架如React,减少重排次数,只更新改变的节点。
Debounce窗口尺寸变化
- 在动画或响应式设计中,防止频繁触发重排,减少资源浪费。
读写分离
- 确保设置样式和属性值分开执行,以减少重排触发次数。
使用will-change: transform
- 开启硬件加速,提升重绘效率,适合复杂动画的情况。
使用绝对或固定定位
- 脱离文档流,减少布局计算,降低重排代价。
使用display: none而非visibility
- 避免触发布局或重绘,减少不必要的计算。
实践与疑问
-
会变属性触发合成的原理
需要深入理解CSS transform在渲染过程中的具体机制,为什么它不需要重排或重绘。 -
拦截resize事件
需要学习如何有效地实现Debounce策略,例如使用自定义 revolutions来确保每次调整仅发生一次。 -
图片加载失败的问题
检查图片链接,确保所有图片资源能够正常加载,以避免影响文章阅读体验。
结论
通过学习和实践这些优化方法,我将能够显著提升前端应用的性能。特别是在处理动态布局和复杂动效时,合理使用会变属性和优化策略,将为用户带来更流畅的体验。接下来,我计划结合这些方法,逐步优化现有项目,提升代码效率和执行速度。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月22日 13时02分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
重写的特点
2019-03-11
计算机网络UDP协议和TCP协议
2019-03-11
Linux运行C语言文件
2019-03-11
C字符串高级
2019-03-11
2010-03-25 函数题
2019-03-11
C语言_动态内存分配练习
2019-03-11
Linux学习_系统进程概念
2019-03-11
七层网络模型(待添加)
2019-03-11
考研复试——KY276 Problem C
2019-03-11
老鸟带你画tiled lines
2019-03-11
MybatisPlus自定义Sql实现多表查询
2019-03-12
Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1
2019-03-12
PyQt5快速上手基础篇10-QSettings用法
2019-03-12
JQuery--手风琴,留言板
2019-03-12
MFC 自定义消息发送字符串
2019-03-12
goahead 下goaction测试与搭建
2019-03-12
Adding Powers
2019-03-12
ideal 下创建springboot项目
2019-03-12
Linux操作系统的安装与使用
2019-03-12
ajax请求出现/[object%20Object]错误的解决办法
2019-03-12