六、“重排”“重绘”和“合成”
发布日期: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来确保每次调整仅发生一次。

    • 图片加载失败的问题

      检查图片链接,确保所有图片资源能够正常加载,以避免影响文章阅读体验。

    结论

    通过学习和实践这些优化方法,我将能够显著提升前端应用的性能。特别是在处理动态布局和复杂动效时,合理使用会变属性和优化策略,将为用户带来更流畅的体验。接下来,我计划结合这些方法,逐步优化现有项目,提升代码效率和执行速度。

    上一篇:九、垃圾回收:垃圾数据是如何自动回收的?
    下一篇:五、HTML、CSS和JavaScript,是如何变成页面的?

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月22日 13时02分26秒