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

浏览器的重排重绘

样式或节点的更改,以及对布局信息的访问等,都有可能导致重排和重绘。而重排和重绘的过程在主线程中进行,这意味着不合理的重排重绘会导致渲染卡顿,用户交互滞后等性能问题。 知识点深入 1....而 DOM 或 CSSOM 被修改,会导致浏览器重复执行图中的步骤。重排和重绘,本质上指的就是分别重新触发 Layout 和 Paint 的过程,且重排必定导致重绘。...相关的方法属性如 offsetTop getComputedStyle 等。 2. 如何减少重排重绘 意义 大多数显示器的刷新率是 60FPS(frames per second)。...避免对样式频繁操作,了解常用样式属性触发 Layout / Paint / Composite 的机制,合理使用样式。...参考资料 渲染树构建、布局及绘制 避免大型、复杂的布局和布局抖动 CSS 属性触发布局、绘制及合成的数据 What forces layout / reflow

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

    你真的了解回流和重绘吗

    页面一开始渲染的时候(这肯定避免不了) 浏览器的窗口尺寸变化(因为回流是根据视口的大小来计算元素的位置和大小的) 注意:回流一定会触发重绘,而重绘不一定会回流 根据改变的范围和程度,渲染树中或大或小的部分需要重新计算...因此,我们在修改样式的时候,最好避免使用上面列出的属性,他们都会刷新渲染队列。如果要使用它们,最好将值缓存起来。...对于复杂动画效果,使用绝对定位让其脱离文档流 对于复杂动画效果,由于会经常的引起回流重绘,因此,我们可以使用绝对定位,让它脱离文档流。否则会引起父元素以及后续元素频繁的回流。这个我们就直接上个例子。...我通过使用chrome的Performance捕获了一段时间的回流重绘情况,实际结果如下图: ? 从图中我们可以看出,在动画进行的时候,没有发生任何的回流重绘。如果感兴趣你也可以自己做下实验。...重点 使用css3硬件加速,可以让transform、opacity、filters这些动画不会引起回流重绘 对于动画的其它属性,比如background-color这些,还是会引起回流重绘的,不过它还是可以提升这些动画的性能

    1.7K21

    你真的了解回流和重绘吗?(面试必问)

    页面一开始渲染的时候(这肯定避免不了) 浏览器的窗口尺寸变化(因为回流是根据视口的大小来计算元素的位置和大小的) 注意:回流一定会触发重绘,而重绘不一定会回流 根据改变的范围和程度,渲染树中或大或小的部分需要重新计算...以上属性和方法都需要返回最新的布局信息,因此浏览器不得不清空队列,触发回流重绘来返回正确的值。因此,我们在修改样式的时候,最好避免使用上面列出的属性,他们都会刷新渲染队列。...如果要使用它们,最好将值缓存起来。 减少回流和重绘 好了,到了我们今天的重头戏,前面说了这么多背景和理论知识,接下来让我们谈谈如何减少回流和重绘。...我通过使用chrome的Performance捕获了一段时间的回流重绘情况,实际结果如下图: 从图中我们可以看出,在动画进行的时候,没有发生任何的回流重绘。如果感兴趣你也可以自己做下实验。...重点 使用css3硬件加速,可以让transform、opacity、filters这些动画不会引起回流重绘 对于动画的其它属性,比如background-color这些,还是会引起回流重绘的,不过它还是可以提升这些动画的性能

    2.4K40

    你真的了解回流和重绘吗

    页面一开始渲染的时候(这肯定避免不了) 浏览器的窗口尺寸变化(因为回流是根据视口的大小来计算元素的位置和大小的) 注意:回流一定会触发重绘,而重绘不一定会回流 根据改变的范围和程度,渲染树中或大或小的部分需要重新计算...因此,我们在修改样式的时候,最好避免使用上面列出的属性,他们都会刷新渲染队列。如果要使用它们,最好将值缓存起来。...这个对比的性能差距就比较明显。 对于复杂动画效果,使用绝对定位让其脱离文档流 对于复杂动画效果,由于会经常的引起回流重绘,因此,我们可以使用绝对定位,让它脱离文档流。...我通过使用chrome的Performance捕获了动画一段时间里的回流重绘情况,实际结果如下图: 添加描述 从图中我们可以看出,在动画进行的时候,没有发生任何的回流重绘。...重点 使用css3硬件加速,可以让transform、opacity、filters这些动画不会引起回流重绘 对于动画的其它属性,比如background-color这些,还是会引起回流重绘的,不过它还是可以提升这些动画的性能

    5.4K50

    【调试】ChromeDevTool高级调式

    如果让浏览器的刷新与显示器的刷新同步,那么就会变得很流畅。...需要注意的是: “重绘”不一定需要“重排”,比如改变某个网页元素的颜色,就只会触发“重绘”。因为布局没有改变,所以没有触发“重排”。...但是,“重排”必然导致“重绘”,比如改变一个网页元素的位置,就会同时触发“重绘”和“重排”,因为布局改变了。 ####如何开发不会导致重排?...(1)样式表越简单,重排和重绘越快;(OOCSS) (2)重排和重绘的DOM元素层级越高,成本越高; (3)table元素的重排和重绘成本,要高于div元素; (4)尽量不要把读操作和写操作放在一个语句里面...visibility对重排影响不影响重绘。 达到高效的原则: 影响重绘,但不影响重排,而且能让GPU参与。 同时,需要深刻理解“层”的概念。

    59720

    页面性能优化的利器 — Timeline

    一般来说,我们会使用JavaScript来实现一些视觉变化的效果。比如用jQuery的animate函数做一个动画、对一个数据集进行排序、或者往页面里添加一些DOM元素等。...网页中的重绘过程是影响整体性能下降的关键点之一,因而网站开发者应该更多地去避免在站点中进行不必要以及不适时的重绘步骤,借助Inspector中的Timeline面板可以很好地剖析这一些存在的问题。...可以看到下图中上方的两个红色框位置,该区域是Timeline面板的整体预览区,分了三部分(FPS、CPU、NET)来展示,具体可查看Timeline使用详情。...如下图中的操作,在勾选了Paint Flashing后,还是在Demo页面中,点击图片触发JS事件,进而会span标签的内容以及颜色,而在页面预览区域中,可以观察到该行文本在刷新内容过程中,有绿色的方框进行高亮包围...另外一个重要的现象是,虽然点击后的JS事件仅修改了的内容,但是重绘却发生在整一个标签中,说明了个别元素的重新绘制,一般会影响到父元素或者是周围的元素,造成区域性重绘,因此在页面中避免不必要的重绘显得至关重要

    7.2K30

    Web动画性能介绍

    但对于以后出现的帧可以走些捷径: 如果某些特定 CSS 属性变化,并不需要发生重绘。...Chrome 可以使用早已作为纹理而存在于 GPU 中的层来重新复合,但会使用不同的复合属性(例如,出现在不同的位置,拥有不同的透明度等等)。 如果层的部分失效,它会被重绘并且重新上传。...如果图层中某个元素需要重绘,那么整个图层都需要重绘。 Chrome 中,图层分为 RenderLayer(负责 DOM 子树),GraphicsLayer(负责 RenderLayer 的子树)。...优化方式 减少重绘和重排 具体见 Rendering: repaint, reflow/relayout, restyle 使用硬件加速 生成复合层(composited layer/GraphicsLayer...用CSS3动画时,使用绘制效率比较高的属性 改变位置 改变大小 旋转 改变透明度(透明度改变不会触发重绘哦) 在chrome浏览器中查看复合层的方式为 ?

    1.2K30

    重绘与回流_html回流重绘

    将每个节点绘制填充到图层位图中 (Paint–重绘) 5. 图层作为纹理上传至GPU 6....【使用opacity来代替visibility】 (1).使用visibility不触发回流,但是依然重绘。 (2).直接使用opacity即触发重绘,又触发回流(GPU底层设计如此!)。...(3).opacity配合图层使用,即不触发重绘也不触发回流。 原因: 透明度的改变时,GPU在绘画时只是简单的降低之前已经画好的纹理的alpha值来达到效果,并不需要整体的重绘。...,浏览器为了给你最精确的值,需要刷新内部队列, 因为队列中可能会有影响到这些值的操作。...—-请求动画帧 1.window.requestAnimationFrame() 说明:该方法会告诉浏览器在下一次重绘回流之前调用你所指定的函数 1.参数:该方法使用一个回调函数作为参数,这个回调函数会在浏览器下一次重绘之前调用

    1.9K20

    前端常见面试题--初级版

    2.如何在 React 中实现组件之间的通信?3.Angular 的依赖注入是如何工作的?4.你如何使用 jQuery 选择和操作 DOM?...### 回答示例:**React和Vue的区别:**React使用虚拟DOM和props进行数据传递,更适合大型应用;Vue使用直观的模板和数据绑定,更适合小型到中型应用。...**jQuery选择和操作DOM:**可以使用$函数选择DOM元素,然后使用jQuery提供的方法(如.html(), .css(), .addClass(), .remove()等)来操作这些元素。...**避免重绘和回流:**尽量减少对DOM的操作,避免频繁触发重绘和回流。可以使用requestAnimationFrame来批量更新DOM,或者使用transform属性来触发合成操作而不是回流。...**优化移动端性能:**减少加载时间、使用触摸友好的UI、优化输入延迟、避免不必要的加载和重绘等。**视口和视口单位:**视口是用户在屏幕上看到的区域。

    2.5K11

    谈谈前端性能优化-面试版

    (`Layout`--回流和重布局);4、将每个节点绘制填充到图层位图中(`Paint Setup`和`Paint`--重绘);5、图层作为纹理上传至`GUI`;6、复合多个图层到页面上生成最终屏幕图像...2、使用opacity替代visibility:使用visibility不触发重排,但是依然重绘;直接使用opacity既触发重绘,又触发重排(GPU底层设计如此!)...用途当无法使用CSS3制作动画的情况下,使用这种方法替代定时器制作动画;由于重绘就调用的机制,制作的动画频率与浏览器的刷新频率一致,不会出现闪动,保证了动画的流畅;示例重布局);4、将每个节点绘制填充到图层位图中(`Paint Setup`和`Paint`--重绘);5、图层作为纹理上传至`GUI`;6、复合多个图层到页面上生成最终屏幕图像...用途当无法使用CSS3制作动画的情况下,使用这种方法替代定时器制作动画;由于重绘就调用的机制,制作的动画频率与浏览器的刷新频率一致,不会出现闪动,保证了动画的流畅;示例<!

    1.5K20

    谈谈前端性能优化-面试版

    (`Layout`--回流和重布局);4、将每个节点绘制填充到图层位图中(`Paint Setup`和`Paint`--重绘);5、图层作为纹理上传至`GUI`;6、复合多个图层到页面上生成最终屏幕图像...:淘宝轮播图可以使用Chrome浏览器调试工具的Performance来观察淘宝首页一个轮播图引起的重绘回流过程:Update Layer Tree回流和重布局:Paint重绘:Composite Layers...2、使用opacity替代visibility:使用visibility不触发重排,但是依然重绘;直接使用opacity既触发重绘,又触发重排(GPU底层设计如此!)...;opacity配合图层使用,既不触发重绘也不触发重排; 原因:透明度的改变时,GPU在绘画时只是简单的降低之前已经画好的纹理的alpha值来达到效果,并不需要整体的重绘。...用途当无法使用CSS3制作动画的情况下,使用这种方法替代定时器制作动画;由于重绘就调用的机制,制作的动画频率与浏览器的刷新频率一致,不会出现闪动,保证了动画的流畅;示例<!

    99310

    谈谈前端性能优化-面试版

    (`Layout`--回流和重布局);4、将每个节点绘制填充到图层位图中(`Paint Setup`和`Paint`--重绘);5、图层作为纹理上传至`GUI`;6、复合多个图层到页面上生成最终屏幕图像...:淘宝轮播图可以使用Chrome浏览器调试工具的Performance来观察淘宝首页一个轮播图引起的重绘回流过程:Update Layer Tree回流和重布局:Paint重绘:Composite Layers...2、使用opacity替代visibility:使用visibility不触发重排,但是依然重绘;直接使用opacity既触发重绘,又触发重排(GPU底层设计如此!)...;opacity配合图层使用,既不触发重绘也不触发重排; 原因:透明度的改变时,GPU在绘画时只是简单的降低之前已经画好的纹理的alpha值来达到效果,并不需要整体的重绘。...用途当无法使用CSS3制作动画的情况下,使用这种方法替代定时器制作动画;由于重绘就调用的机制,制作的动画频率与浏览器的刷新频率一致,不会出现闪动,保证了动画的流畅;示例<!

    1.6K10

    谈谈前端性能优化-面试版_2023-02-27

    (`Layout`--回流和重布局); 4、将每个节点绘制填充到图层位图中(`Paint Setup`和`Paint`--重绘); 5、图层作为纹理上传至`GUI`; 6、复合多个图层到页面上生成最终屏幕图像...6.示例 案例一:淘宝轮播图 可以使用Chrome浏览器调试工具的Performance来观察淘宝首页一个轮播图引起的重绘回流过程: Update Layer Tree回流和重布局: Paint重绘:...2、使用opacity替代visibility: 使用visibility不触发重排,但是依然重绘; 直接使用opacity既触发重绘,又触发重排(GPU底层设计如此!)...; opacity配合图层使用,既不触发重绘也不触发重排; 原因:透明度的改变时,GPU在绘画时只是简单的降低之前已经画好的纹理的alpha值来达到效果,并不需要整体的重绘。...用途 当无法使用CSS3制作动画的情况下,使用这种方法替代定时器制作动画; 由于重绘就调用的机制,制作的动画频率与浏览器的刷新频率一致,不会出现闪动,保证了动画的流畅; 示例 <!

    1.1K60

    谈谈前端性能优化--面试版

    (`Layout`--回流和重布局);4、将每个节点绘制填充到图层位图中(`Paint Setup`和`Paint`--重绘);5、图层作为纹理上传至`GUI`;6、复合多个图层到页面上生成最终屏幕图像...:淘宝轮播图可以使用Chrome浏览器调试工具的Performance来观察淘宝首页一个轮播图引起的重绘回流过程:Update Layer Tree回流和重布局:Paint重绘:Composite Layers...2、使用opacity替代visibility:使用visibility不触发重排,但是依然重绘;直接使用opacity既触发重绘,又触发重排(GPU底层设计如此!)...;opacity配合图层使用,既不触发重绘也不触发重排; 原因:透明度的改变时,GPU在绘画时只是简单的降低之前已经画好的纹理的alpha值来达到效果,并不需要整体的重绘。...用途当无法使用CSS3制作动画的情况下,使用这种方法替代定时器制作动画;由于重绘就调用的机制,制作的动画频率与浏览器的刷新频率一致,不会出现闪动,保证了动画的流畅;示例<!

    98560

    Bootstrap Table强大的web数据表格渲染框架

    Bootstrap Table 是什么‌Bootstrap Table 是一个基于 Bootstrap 框架的开源插件,专为快速构建功能丰富、响应式的数据表格而设计。‌...Web 开发领域,数据表格是呈现结构化数据的核心组件。...、核心技术特性:重新定义表格功能边界(一)响应式设计体系自适应布局:通过data-responsive="true"启用智能列隐藏,移动端自动切换为堆叠视图弹性单位支持:兼容百分比 / 像素 / 视口单位...)DOM 缓存机制:固定表头 / 列通过data-fixed-columns减少重绘开销三、快速入门:10 分钟搭建智能数据表格(一)环境准备数据量控制在 500 条以内首屏优化:通过data-ajax="false"禁用自动加载,手动控制数据请求时机样式优化:使用data-card-view="true"切换卡片式布局

    68600

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

    //正文开始 关于回流(reflows)与重绘(repaints),我已经在twitter和delicious上发布,但是并没有在演讲中提到或是以文章形式发布。...第一次让我开始思考关于回流(reflows)与重绘(repaints)的问题是在和ParisWeb上的Mr. Glazman做一个firey交换的时候。...让我们从一些背景资料开始,当一个元素的外观的可见性visibility发生改变的时候,重绘(repaint)也随之发生,但是不影响布局。...根据Opera浏览器,重绘的代价是高昂的,因为浏览器必须验证DOM树上其他节点元素的可见性。而回流更是性能的关键因为其变化涉及到部分页面(或是整个页面)的布局。...Jenny Donnelly, YUI 数据表格 widget的所有者,建议使用数据表格的固定布局以便更有效的布局算法,任何表格-布局的值除了”auto”将引发一个固定布局,根据CSS2.1规范,这将允许表格一行一行的呈递

    1.3K40

    也谈 setTimeout

    单线程的浏览器, js 引擎和渲染引擎必定是顺序执行 (stack),比如点击一个按钮,浏览器会先改变按钮的状态(actived,重绘), 然后才执行 js (js引擎) 。...所以往 dom 插入元素再立刻操作这个 dom ,那么很有可能这个 dom 还没有重绘完成,因此操作无效。 那么,为什么放入 setTimeout( func, 0 ) 中就可以呢?...其实答案已经出来了, setTimeout 会等到重绘完成才执行代码,自然无往而不利。...setTimeout 进一步理解 可以更深入的思考: setTimeout( func, 0 ) 是延迟 0ms 执行,也就是立刻执行,但为什么还是在重绘之后呢? 重绘肯定会超过 0ms 啊!...图中蓝色的圆角矩形是 js 块(javascript block) ,右边的数字表示时间,“问题”是模拟浏览器的判断,左边则是 javascript代码的执行时间。

    1.7K10

    也谈 setTimeout

    单线程的浏览器, js 引擎和渲染引擎必定是顺序执行 (stack),比如点击一个按钮,浏览器会先改变按钮的状态(actived,重绘), 然后才执行 js (js引擎) 。...所以往 dom 插入元素再立刻操作这个 dom ,那么很有可能这个 dom 还没有重绘完成,因此操作无效。 那么,为什么放入 setTimeout( func, 0 ) 中就可以呢?...其实答案已经出来了, setTimeout 会等到重绘完成才执行代码,自然无往而不利。...setTimeout 进一步理解 可以更深入的思考: setTimeout( func, 0 ) 是延迟 0ms 执行,也就是立刻执行,但为什么还是在重绘之后呢? 重绘肯定会超过 0ms 啊!...图中蓝色的圆角矩形是 js 块(javascript block) ,右边的数字表示时间,“问题”是模拟浏览器的判断,左边则是 javascript代码的执行时间。

    1.9K100

    为什么越来越少的人用 jQuery?

    这两个方法可以通过传入css选择器形式的字符串,就可以匹配到预期的DOM节点。以下是目前两个API的兼容情况: ? ? 从图中可以看到,这两个API已经很好的兼容各个浏览器。...最经典的莫过重绘和回流这两个概念。 重绘:就是页面重新进行绘制,比方说,修改一个元素的背景颜色。 回流:一般来说,浏览器进入页面的时候就已经进行了一次回流,回流其实指的就是页面重新进行排版布局。...为什么这么说,请看以下分析: 当我们拿到一组新闻数据要渲染到ul标签里时,通常我们会先将新闻数据逐条进行字符串拼接,紧接着使用$符选择ul元素,并修改ul的innerHTML的值为拼接好的字符串(使用html...这次页面进行了重绘(这时必然的),首先不分析第一次的性能好或坏,用下一个说明将更加有力。 比如说我们这时多了一个换一换按钮。...三、现代框架对jQuery的影响: 现在国内比较火的React 、Vue 、Angular框架,都是属于MV*框架的范畴,其设计特点,主要是以数据为核心。可以说操作DOM的事儿,就留给框架去做了。

    1.1K30
    领券