首页
学习
活动
专区
圈层
工具
发布

什么是回流与重绘 (Reflow & Repaint)

以Google,Firefox,Safari为例,Firefox 使用Geoko——Mozilla 自主研发的渲染引擎,Safari 和Chrome 都使用 webkit。...添加或者删除可见的DOM元素 激活CSS伪类(例如::hover) 查询某些属性或调用某些方法 主要有下面几个API 盒子操作相关 elem.offsetLeft, elem.offsetTop...事实上,回流确实比重绘的成本更大,并且有时候并不是只回流一个元素,甚至会带动父元素或者子元素一起回流。...尽可能在 DOM 树的最末端改变class。 避免设置多层内联样式。 将动画效果应用到position属性为absolute或fixed的元素上。 避免使用CSS表达式(例如:calc())。...避免频繁读取会引发回流/重绘的属性,如果确实需要多次使用,就用一个变量缓存起来。 对具有复杂动画的元素使用绝对定位,使它脱离文档流,否则会引起父元素及后续元素频繁回流。

1K10

分享 | 前端性能优化(CSS动画篇)

webkit变换的元素 * 拥有加速CSS过滤器的元素 * 元素有一个包含复合层的后代节点(一个元素拥有一个子元素,该子元素在自己的层里) * 元素有一个z-index较低且包含一个复合层的兄弟元素(换句话说就是该元素在复合层上面渲染...) 需要注意的是,如果图层中某个元素需要重绘,那么整个图层都需要重绘。...最好的情况是,改变的属性仅仅印象图层的组合,变换(transform)和透明度(opacity)就属于这种情况 现代浏览器如Chrome,Firefox,Safari和Opera都对变换和透明度采用硬件加速...,所以会触发重布局 别使用CSS类名做状态标记 如果在网页中使用CSS的类来对节点做状态标记,当这些节点的状态标记类修改时,将会触发节点的重绘和重布局。...取而代之的更好方法是使用translate,这个不会触发重布局 JS动画和CSS3动画的比较 我们经常面临一个抉择:是使用JavaScript的动画还是使用CSS的动画,下面将对比一下这两种方式 JS动画

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CSS will-change,为什么能提升几十倍的性能?

    一种关键的优化工具是CSS属性will-change,它可以告诉浏览器元素将要发生的变化,从而提前分配资源并优化渲染。...加入will-change后,通过观察复合层,如图下 layer-start.gif 加入will-change后,元素会被提升到单独的复合层,动画(重绘、重排)的操作只会在单独复合层上进行,减少了原来的页面层重绘和重排的行为...安卓不会而iphone会,iphone上使用的是safari浏览器 解: will-change加入后,元素提升到复合层,浏览器其实会进行 光栅化 至于为什么safari浏览器在元素提升到复合层后,...,可以通过在执行完重排重绘后在适当的时机移除will-change(让元素回到原来的页面层,不在单独一个复合层)就可以解决 五、什么操作会将元素提升到复合层 在CSS中,以下属性可以将元素提升到复合层:...需要注意的是,将元素提升到复合层也会增加内存的占用和渲染的复杂性,因此不应滥用。只有当元素需要频繁改变或有复杂的动画效果时,才建议将其提升到复合层。

    89740

    你真的了解回流和重绘吗

    这个时候,只要我们点击一下那个按钮,把这个元素设置为绝对定位,帧数就可以稳定60。 css3硬件加速(GPU加速) 比起考虑如何减少回流重绘,我们更期望的是,根本不要回流重绘。...这个时候,css3硬件加速就闪亮登场啦!! 划重点: 1. 使用css3硬件加速,可以让transform、opacity、filters这些动画不会引起回流重绘 。 2....我通过使用chrome的Performance捕获了动画一段时间里的回流重绘情况,实际结果如下图: 添加描述 从图中我们可以看出,在动画进行的时候,没有发生任何的回流重绘。...重点 使用css3硬件加速,可以让transform、opacity、filters这些动画不会引起回流重绘 对于动画的其它属性,比如background-color这些,还是会引起回流重绘的,不过它还是可以提升这些动画的性能...css3硬件加速的坑 当然,任何美好的东西都是会有对应的代价的,过犹不及。css3硬件加速还是有坑的: 如果你为太多元素使用css3硬件加速,会导致内存占用较大,会有性能问题。

    5.3K50

    盒子端 CSS 动画性能提升研究

    基于此,对于 Web 动画的性能问题,仅仅停留在感觉已经优化的OK之上,是不够的,想要在盒子端跑出高性能接近 60 FPS 的流畅动画,就必须要刨根问底,深挖每一处可以提升的方法。...GPU 硬件加速的基础之上,更深入的去优化 CSS 动画,先给出最后的一个优化步骤方案: 精简 DOM ,合理布局 使用 transform 代替 left、top,减少使用耗性能样式 控制频繁动画的层级关系...或者 硬件加速的 2D Canvas 元素 3D 或透视变换 (perspective、transform) 的 CSS 属性 对自己的 opacity 做 CSS 动画或使用一个动画变换的元素 拥有加速...此时,层级关系才是我们希望看到的,.list 元素没有触发生成 Graphics Layer 。而我们希望需要硬件加速的 .swiper 保持在最上方,每次动画过程中只会独立重绘这部分的区域。...GPU 硬件加速,一定要注意元素层级的关系,尽量保持让需要进行 CSS 动画的元素的 z-index 保持在页面最上方。

    85360

    盒子端 CSS 动画性能提升研究

    基于此,对于 Web 动画的性能问题,仅仅停留在感觉已经优化的OK之上,是不够的,想要在盒子端跑出高性能接近 60 FPS 的流畅动画,就必须要刨根问底,深挖每一处可以提升的方法。...GPU 硬件加速的基础之上,更深入的去优化 CSS 动画,先给出最后的一个优化步骤方案: 精简 DOM ,合理布局 使用 transform 代替 left、top,减少使用耗性能样式 控制频繁动画的层级关系...或者 硬件加速的 2D Canvas 元素 3D 或透视变换 (perspective、transform) 的 CSS 属性 对自己的 opacity 做 CSS 动画或使用一个动画变换的元素 拥有加速...此时,层级关系才是我们希望看到的,.list 元素没有触发生成 Graphics Layer 。而我们希望需要硬件加速的 .swiper 保持在最上方,每次动画过程中只会独立重绘这部分的区域。...GPU 硬件加速,一定要注意元素层级的关系,尽量保持让需要进行 CSS 动画的元素的 z-index 保持在页面最上方。

    93660

    盒子端 CSS 动画性能提升研究

    基于此,对于 Web 动画的性能问题,仅仅停留在感觉已经优化的OK之上,是不够的,想要在盒子端跑出高性能接近 60 FPS 的流畅动画,就必须要刨根问底,深挖每一处可以提升的方法。...GPU 硬件加速的基础之上,更深入的去优化 CSS 动画,先给出最后的一个优化步骤方案: 精简 DOM ,合理布局 使用 transform 代替 left、top,减少使用耗性能样式 控制频繁动画的层级关系...或者 硬件加速的 2D Canvas 元素 3D 或透视变换 (perspective、transform) 的 CSS 属性 对自己的 opacity 做 CSS 动画或使用一个动画变换的元素 拥有加速...而我们希望需要硬件加速的 .swiper 保持在最上方,每次动画过程中只会独立重绘这部分的区域。...GPU 硬件加速,一定要注意元素层级的关系,尽量保持让需要进行 CSS 动画的元素的 z-index 保持在页面最上方。

    2.4K130

    前端动画大乱炖

    代码中使用这个API,就是告诉浏览器希望执行一个动画,让浏览器在下一个动画帧安排一次网页重绘。...: 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随显示器的刷新频率(60 Hz或者75 Hz); 在隐藏或不可见的元素中,将不会进行重绘或回流,这当然就意味着更少的的...DEMO传送门 Animation 类似的CSS还提供了一个Animation属性,不过区别于Transition,Animation作用于元素本身而不是样式属性,可以使用关键帧的概念,应该说可以实现更自由的动画效果...下面主要是介绍SVG中的几个用于动画的元素,它们分别是: :通常放置到一个SVG图像元素里面,用来定义这个图像元素的某个属性的动画变化过程; :元素也是放置一个图像元素里面...: WebGL 参考资料 WebGL API 几个常用的动画库 Ani.js -- 基于CSS动画的生命处理库 Dynamics.js -- 创建具有物理运动效果动画的js库 Animate.css

    1.6K20

    前端-动画大乱炖

    代码中使用这个API,就是告诉浏览器希望执行一个动画,让浏览器在下一个动画帧安排一次网页重绘。...: 会把每一帧中的所有DOM操作集中起来,在一次重绘或回流中就完成,并且重绘或回流的时间间隔紧紧跟随显示器的刷新频率(60 Hz或者75 Hz); 在隐藏或不可见的元素中,将不会进行重绘或回流,这当然就意味着更少的的...f=css3_transition Animation 类似的CSS还提供了一个Animation属性,不过区别于Transition,Animation作用于元素本身而不是样式属性,可以使用关键帧的概念...f=css3_animation Canvas 是HTML5新增的元素,作为页面图形绘制的容器,可用于通过使用JavaScript中的脚本来绘制图形。...下面主要是介绍SVG中的几个用于动画的元素,它们分别是: :通常放置到一个SVG图像元素里面,用来定义这个图像元素的某个属性的动画变化过程;  :元素也是放置一个图像元素里面

    1.3K20

    进阶|你的css经不住这层考验,就是失败...

    经过对比,在盒子端 CSS 动画的性能要优于 Javascript 动画,而在 CSS 动画里,使用 GPU 硬件加速的动画性能要优于不使用硬件加速的性能。...核心代码如下,能近似计算每秒页面帧率,以及我们额外记录一个 allFrameCount,用于记录 rAF 的执行次数,用于计算每次动画的帧率 : 优化方案设计 所以,我们的目标就是在使用 GPU 硬件加速的基础之上...对自己的 opacity 做 CSS 动画或使用一个动画变换的元素 7. 拥有加速 CSS 过滤器的元素 8....而我们希望需要硬件加速的 .swiper 保持在最上方,每次动画过程中只会独立重绘这部分的区域。...GPU 硬件加速,一定要注意元素层级的关系,尽量保持让需要进行 CSS 动画的元素的 z-index 保持在页面最上方。

    78330

    浏览器页面渲染全解析过程优化及实战指南详解

    (二)渲染引擎分类Blink(Chrome、Edge、Opera)WebKit(Safari)Gecko(Firefox)(三)渲染的基础流程解析HTML构建DOM树解析CSS构建CSSOM树合并DOM...Repaint)(一)重排当DOM的变化影响了元素的布局信息时触发会导致浏览器重新计算布局触发重排的操作添加/删除可见DOM元素元素尺寸改变(width/height/padding等)内容变化(文本改变或图片尺寸改变...)浏览器窗口尺寸改变计算某些属性(getComputedStyle)(二)重绘当一个元素的外观发生改变,但没有影响到布局信息时触发触发重绘的操作color、background-color的修改visibility....element { will-change: transform; }(三)合成层优化场景动画元素滚动容器频繁变化的元素(四)合成层注意事项不要创建过多合成层合成层需要内存和管理开销使用Chrome...关键优化方向包括:减少关键资源加载时间优化CSS加载和解析顺序避免不必要的重排和重绘利用合成层提升动画性能实现高性能的交互组件通过本文提供的应用实例和优化方法,开发者可以在实际项目中应用这些技术,打造出高性能

    61510

    浏览器页面渲染全解析过程优化及实战指南详解

    (二)渲染引擎分类 Blink(Chrome、Edge、Opera) WebKit(Safari) Gecko(Firefox) (三)渲染的基础流程 解析HTML构建DOM树 解析CSS构建CSSOM...Repaint) (一)重排 当DOM的变化影响了元素的布局信息时触发 会导致浏览器重新计算布局 触发重排的操作 添加/删除可见DOM元素 元素尺寸改变(width/height/padding等)...内容变化(文本改变或图片尺寸改变) 浏览器窗口尺寸改变 计算某些属性(getComputedStyle) (二)重绘 当一个元素的外观发生改变,但没有影响到布局信息时触发 触发重绘的操作 color、...属性 使用will-change属性 .element { will-change: transform; } (三)合成层优化场景 动画元素 滚动容器 频繁变化的元素 (四)合成层注意事项 不要创建过多合成层...关键优化方向包括: 减少关键资源加载时间 优化CSS加载和解析顺序 避免不必要的重排和重绘 利用合成层提升动画性能 实现高性能的交互组件 通过本文提供的应用实例和优化方法,开发者可以在实际项目中应用这些技术

    27210

    reflow和repaint(摘录自张鑫旭的翻译)

    // zxx: Firefox浏览器相关内容可以看这里;Safari可以看这里。...让我们从一些背景资料开始,当一个元素的外观的可见性visibility发生改变的时候,重绘(repaint)也随之发生,但是不影响布局。...根据Opera浏览器,重绘的代价是高昂的,因为浏览器必须验证DOM树上其他节点元素的可见性。而回流更是性能的关键因为其变化涉及到部分页面(或是整个页面)的布局。...动画效果应用到position属性为absolute或fixed的元素上 动画效果应用到position属性为absolute或fixed的元素上,它们不影响其他元素的布局,所它他们只会导致重新绘制,而不是一个完整回流...动画元素每次移动3像素可能在非常快的机器上看起来平滑度低了,但它不会导致CPU在较慢的机器和移动设备中抖动。 避免使用table布局 避免使用table布局。

    1.2K40

    高性能Web动画和渲染原理系列(5)合成层的生成条件和陷阱

    : 具有CSS3D属性或CSS透视效果 包含的RenderObject节点表示的是使用硬件加速的视频解码技术的HTML5video元素 包含的RenderObject节点包含使用了硬件加速的Canvas2D...或WebGL技术 使用了CSS透明效果或CSS变形动画 使用了硬件加速的CSS Filters技术(有的文献中表示filters属性并没有提升为合成层的效果,推测只有一部分filters滤镜效果需要使用硬件加速...隐式合成主要发生在元素出现重叠时,层级较低的元素如果被提升为合成层后,最终合成的结果就可能出现在原来比自己层级更高的元素之上,从而出现错误的堆叠关系,为了纠正这种关系,只能让原本层级高(但是并不用提升为合成层的元素...Fouber这篇CSS硬件加速也有坑中的示例更加详细,子元素引发父元素提升,父元素又引发兄弟元素提升。 三....Document这一层(通常是正常文档流这一层,包含了大量的流式布局的元素)不断重绘,从而影响渲染效率,如果能够让动画的节点放到单独的合成层里,就可以避免这种大规模重绘,并借助GPU加速合成的能力加速整个渲染流程

    1.3K10

    深入浅出 CSS 动画

    CSS 动画用于实现元素从一个 CSS 样式配置转换到另一个 CSS 样式配置。 动画包括两个部分: 描述动画的样式规则和用于指定动画开始、结束以及中间点样式的关键帧。...当不需要绘制时,复合操作的开销可以忽略不计,因此在试着调试渲染性能问题时,首要目标就是要避免层的重绘。那么这就给动画的性能优化提供了方向,减少元素的重绘与回流。...而当元素生成了自己的 GraphicsLayer 之后,在动画过程中,Chrome 并不会始终重绘整个层,它会尝试智能地去重绘 DOM 中失效的部分,也就是发生动画的部分,在 Composite 之前,...页面是处于一种分层状态,借助 GPU,浏览器仅仅在每一帧对生成了自己独立 GraphicsLayer 元素层进行重绘,如此,大大的降低了整个页面重排重绘的开销,提升了页面渲染的效率。...因此,CSS 动画(Web 动画同理)优化的第一条准则就是让需要动画的元素生成了自己独立的 GraphicsLayer,强制开始 GPU 加速,而我们需要知道是,GPU 加速的本质是利用让元素生成了自己独立的

    2.2K40

    【调试】ChromeDevTool高级调式

    (能够触发合层的:CSS 3D透视变换、video、webGL、transform动画、加速CSS滤镜、叠加在已经触发合成层,这些发生在GPU中) 重排与重绘 网页生成的时候,至少会渲染一次。...需要注意的是: “重绘”不一定需要“重排”,比如改变某个网页元素的颜色,就只会触发“重绘”。因为布局没有改变,所以没有触发“重排”。...但是,“重排”必然导致“重绘”,比如改变一个网页元素的位置,就会同时触发“重绘”和“重排”,因为布局改变了。 ####如何开发不会导致重排?...(1)样式表越简单,重排和重绘越快;(OOCSS) (2)重排和重绘的DOM元素层级越高,成本越高; (3)table元素的重排和重绘成本,要高于div元素; (4)尽量不要把读操作和写操作放在一个语句里面...css3动画(开启gpu加速)

    43020

    干货 | 携程火车票7个优化动画性能的方法

    3.2 避免使用影响性能的 CSS 属性 这些属性会影响性能,因为它们需要进行复杂的计算和渲染,尤其是在动画中使用时。这些属性可能会导致浏览器进行重排和重绘,从而影响页面的性能和流畅度。...例如,您可以在动画开始前将需要操作的元素缓存到变量中,然后在动画中直接使用这些变量,而不是每次都重新查找元素。 另外,还可以使用 CSS3 的动画属性来代替 JavaScript 操作 DOM。...然而,这种方法会导致浏览器进行重排和重绘,从而影响动画的性能和流畅度。...我们应该尽力避免使用会触发重布局和重绘的属性,以免失帧。最好提前申明动画,这样能让浏览器提前对动画进行优化。...后续也会在此基础之上对还可提高的地方继续加深,后续提供通用的解决方案。

    57530

    Web前端知识体系精简

    7、动画 Animation Animation首先需要设置一个动画函数,然后以这个动画的方式来改变元素的css属性之的变化,动画可以被设置为永久循环演示。...和transition相比,animation设置动画效果更灵活更丰富,二者还有一个区别是:transition只能通过主动改变元素的css值才能触发动画效果,而animation一旦被应用,就开始执行动画...3、重绘和回流 当渲染树中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流。...当渲染树中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。...会引起重绘和回流的操作 添加、删除元素(回流+重绘) 隐藏元素,display:none(回流+重绘),visibility:hidden(只重绘,不回流) 移动元素,比如改变top,left,transform

    1.6K30

    超详细的Web 前端知识体系,等你来挑战!

    7、动画 Animation Animation首先需要设置一个动画函数,然后以这个动画的方式来改变元素的css属性之的变化,动画可以被设置为永久循环演示。...和transition相比,animation设置动画效果更灵活更丰富,二者还有一个区别是:transition只能通过主动改变元素的css值才能触发动画效果,而animation一旦被应用,就开始执行动画...3、重绘和回流 当渲染树中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流。...当渲染树中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。...会引起重绘和回流的操作: 添加、删除元素(回流+重绘) 隐藏元素,display:none(回流+重绘),visibility:hidden(只重绘,不回流) 移动元素,比如改变top,left,transform

    1.3K70
    领券