首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    回流_html回流

    文章目录 css图层 图层创建的条件 (Repaint) 回流 触发的属性 触发回流的属性 常见的触发回流的操作 优化方案 requestAnimationFrame—-请求动画帧 写在最后 学习目标 : 了解前端Dom代码、css样式、js逻辑代码到浏览器展现过程 了解什么是图层 了解回流 了解前端层面针对重回流如何优化 css图层 浏览器在渲染一个页面时,会将页面分为很多个图层,图层有大有小 不会带来重新布局,所以并不一定伴随回流。 需要注意的是:是以图层为单位,如果图层中某个元素需要,那么整个图层都需要。 计算这些值的过程称为布局或回流”不一定需要”回流”,比如改变某个网页元素的颜色,就只会触发””,不会触发”回流”,因为布局没有改变。 “回流”大多数情况下会导致””,比如改变一个网页元素的位置,就会同时触发”回流”和””,因为布局改变了。

    1.9K20编辑于 2022-11-01
  • 来自专栏岳泽以博客

    回流

    HTML默认是流式布局,cssjs会打破这种布局,改变DOM的几何属性外观属性。在绘制时根据渲染树布局,再根据布局绘制,这就是回流回流:改变几何属性的渲染。又称重排。 这时只会回流或只有,因此引出一个定向法则:回流必定引发不一定引发回流。 用户的交互操作引发了网页的渲染。 避免回流 1.使用visibility:hidden替换display:none 2.使用transform代替top top是几何属性,操作top会改变节点位置引发回流,使用transform:translate3d 4.避免规则层级过多 浏览器的CSS解析器解析css文件时,对CSS规则是从右到左匹配查找,样式层级过多会影响回流效率,建议保持CSS规则在3层左右。 7.将频繁回流的节点设置为图层。 在浏览器中设置频繁回流的节点为一张新图层,那新图层就能够阻止节点的渲染行为影响别的节点,这张图层中如何变化都无法影响到其他图层。

    1K20编辑于 2022-11-21
  • 来自专栏那些年我们学过的前端

    回流

    repaint: 当元素的一部分属性发生变化,如外观背景色不会引起布局变化而需要重新渲染的过程叫做 回流一定会引发 但是 不一定引发回流 引发回流的情况 : 首当其冲自然是dom 浏览器窗口发生变化-resize事件发生时 var s = document.body.style; s.padding = "2px"; // 回流+ s.border = "1px solid red"; // 再一次 回流+ s.color = "blue"; // 再一次 s.backgroundColor = "#ccc"; // 再一次 s.fontSize = "14px"; // 再一次 回流+ // 添加node,再一次 回流+ document.body.appendChild(document.createTextNode('abc!')) ; 说到这里大家都知道回流比重的代价要更高,回流的花销跟render tree有多少节点需要重新构建有关系,假设你直接操作body,比如在body最前面插入1个元素,会导致整个render tree

    1.1K10发布于 2019-03-29
  • 来自专栏精通前端

    前端性能优化 | 回流

    一、回流的概念在 HTML 中,每个元素都可以理解成一个盒子,在浏览器解析过程中,会涉及到回流回流(reflow):当DOM的结构发生改变或者某个元素的样式发生变化时,浏览器需要重新计算并重新布局 要了解回流的产生,首先需要了解浏览器解析渲染机制,如下所示:浏览器的解析渲染机制可以分为以下几个步骤:HTML解析:当浏览器接收到 HTML 文档后,会对其进行解析。 二、回流的触发条件回流的触发条件触发条件:当渲染树中部分或者全部元素的尺寸、结构或者属性发生变化以下这些操作会导致回流添加或删除DOM元素:当添加、删除、修改DOM元素时,会导致整个或部分页面的布局发生变化 注意:当触发回流时,一定会触发,但是不一定会引发回流三、如何减少回流浏览器优化机制浏览器针对回流,本身也具备一定的优化机制,但是仅是最基础的。 减少回流的措施了解了回流的触发条件,我们可以尽量避免不该有的操作,减少回流,提高浏览器渲染性能使用CSS动画代替JavaScript动画:CSS动画是利用浏览器的硬件加速,性能更高效。

    3.8K30编辑于 2023-11-24
  • 来自专栏亦枫的大佬之路

    HTML中的回流

    在认识回流之前,我们先认识一下一个页面加载的时候,会发生什么?   页面加载时,生成一个DOM树,DOM Tree里包含了构成页面所有的标签。 每个页面至少发生一次回流/重排,就是页面第一次被加载时。当页面中的元素只是外观或风格被改变不影响布局,比如更换背景色background-color,这个过程就是。 比如改变某个元素的背景色、文字颜色、边框颜色等等 影响回流(reflow)/重排(relayout)的因素 影响(replaint)的因素 元素的布局和几何属性改变时就会触发reflow。 (比如颜色的改变),重排必然导致(比如改变网页位置)。 这样多次重排,变成一次重排 减少 reflow/repaint: (1)不要一条一条地修改 DOM 的样式。

    1.8K20发布于 2020-03-19
  • 来自专栏w候人兮猗的博客

    什么是回流 (Reflow & Repaint)

    Contents 1 写在前面 2 回流(Reflow) 3 (Repaint) 4 影响 5 避免回流 6 总结 写在前面 在讨论今天的主角之前,我们要先了解一下浏览器的渲染机制。 现代浏览器会对频繁的回流操作进行优化,浏览器会维护一个队列,当我们页面发生回流时,有时候并不是立即执行,而是先放入维护的队列中,到达一定时间后统一去进行绘制 当你访问以下属性或方法时,浏览器会立刻清空队列 scrollLeft width、height getComputedStyle() getBoundingClientRect() 所以当我们需要使用如上api获取数据时,我们要注重渲染时机以及取值时机 避免回流 因为在display属性为none的元素上进行的DOM操作不会引发回流。 避免频繁读取会引发回流/的属性,如果确实需要多次使用,就用一个变量缓存起来。 或者说,我们简单理解会引起元素位置变化的就会reflow,会引起位置变化的,只是在以前的位置进行改变背景颜色等,只会repaint 本文首发于什么是回流 (Reflow & Repaint)

    1.2K10发布于 2020-12-21
  • 来自专栏全栈程序员必看

    页面优化——回流

    一、写在前面 页面优化在面试的过程中经常遇到的问题,今天就来总计一下回流的问题。 二、回流是什么 我们都知道一个页面从加载到完成,首先是构建DOM树,然后根据DOM节点进行几何布局形成render树(渲染树),当渲染树构建完成后,页面就根据DOM树开始布局,渲染树也根据设置的样式渲染这些节点 在比如说,我们给一个元素修改颜色,这样的行为是不会影响页面的布局的,DOM树不会发生改变,但是颜色变了,渲染树得重新绘制,这就是。 所以说回流一定会触发不一定触发回流。 因为display为none会脱离文档流,visibility为hidden虽然看不到,但类似透明度为0,其实还在文档流中,还是有渲染的过程。 三、怎么样减少回流 回流会重构DOM树,渲染树也得重新渲染,比较麻烦,哪些行为可以引发回流,如何去避免呢? 1、DOM的删除行为 比如删除某个节点,或者给父元素插入子节点,这类操作都会触发回流

    1.3K20编辑于 2022-11-17
  • 来自专栏全栈前端精选

    浏览器的回流 (Reflow & Repaint)

    作者:腰花 原文链接:https://juejin.im/post/5a9923e9518825558251c96a 写在前面 在讨论回流之前,我们要知道: 浏览器使用流布局模型 (Flow Based 一句话:回流必将引起重不一定会引起回流回流 (Reflow) 当Render Tree中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流。 性能影响 回流比重的代价要更高。 有时即使仅仅回流一个单一的元素,它的父元素以及任何跟随它的元素也会产生回流。 现代浏览器会对频繁的回流操作进行优化: 浏览器会维护一个队列,把所有引起回流的操作放入队列中,如果队列中的任务数量或者时间间隔达到一个阈值的,浏览器就会将队列清空,进行一次批处理,这样可以把多次回流变成一次 因为在display属性为none的元素上进行的DOM操作不会引发回流。 避免频繁读取会引发回流/的属性,如果确实需要多次使用,就用一个变量缓存起来。

    88620发布于 2019-09-29
  • 来自专栏九旬大爷

    DOM优化之回流

    #回流 JS操作DOM很慢,而且修改DOM还会引发它的外观、样式、大小、位置的改变,就会触发流或回流:当我们对 DOM 的修改引发了 DOM 几何尺寸的变化(比如修改元素的宽、高或隐藏元素等)时,浏览器需要重新计算元素的几何属性(其他元素的几何属性和位置也会因此受到影响),然后再将计算的结果绘制出来 这个过程就是回流(也叫重排)。 :当我们对 DOM 的修改导致了样式的变化、却并未影响其几何属性(比如修改了颜色或背景色)时,浏览器不需重新计算元素的几何属性、直接为该元素绘制新的样式(跳过了上图所示的回流环节)。 这个过程叫做。 由此可以看出,不一定导致回流,但是回流一定会导致。 优化的关键,就是把回流的次数最小化。 #如何优化 知道了DOM慢的原因,我就可以逐步优化了。

    1.1K10发布于 2020-10-23
  • 来自专栏web share

    浏览器的回流 (Reflow & Repaint)

    回流 当 Render Tree 中部分或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染部分或全部文档的过程称为回流 当页面中元素样式的改变并不影响它在文档流中的位置时(例如:color、background-color、visibility 等),浏览器会将新样式赋予给元素并重新绘制它,这个过程称为重。 如何避免回流 CSS 避免使用 table 布局。 尽可能在 DOM 树的最末端改变 class。 避免设置多层内联样式。 因为在 display 属性为 none 的元素上进行的 DOM 操作不会引发回流。 避免频繁读取会引发回流/的属性,如果确实需要多次使用,就用一个变量缓存起来。

    1K10发布于 2021-01-14
  • 来自专栏js笔记

    回流(Repaint & Reflow),如何优化

    回流一定会发生不一定会引发回流 4.浏览器优化 现代浏览器大多都通过队列机制来批量更新布局,浏览器会把修改操作放在队列中,至少一个浏览器刷新(16.6ms)才清空队列,但当你获取布局信息时,队列中可能存在影响这写属性和方法返回值的操作 ,即使没有,浏览器也会强制清空队列,触发回流来保证返回正确的值 主要有一下方法和属性 offsetTop、offsetLeft、offsetWidth、offsetHeight scrollTop 5.减少回流 1.css . 减少回流   1.CSS 使用 transform 替代 top 使用 visibility 替换 display: none ,因为前者只会引起重,后者会引发回流(改变了布局) 避免使用 避免频繁读取会引发回流/的属性,如果确实需要多次使用,就用一个变量缓存起来。 对具有复杂动画的元素使用绝对定位,使它脱离文档流,否则会引起父元素及后续元素频繁回流

    1.2K10编辑于 2022-10-25
  • 来自专栏陈纪庚

    你真的了解回流

    浏览器的渲染过程 本文先从浏览器的渲染过程来从头到尾的讲解一下回流,如果大家想直接看如何减少回流,可以跳到后面。(这个渲染过程来自MDN) ? 既然知道了浏览器的渲染过程后,我们就来探讨下,何时会发生回流。 何时发生回流 我们前面知道了,回流这一阶段主要是计算节点的位置和几何信息,那么当页面布局和几何信息发生变化的时候,就需要回流。 页面一开始渲染的时候(这肯定避免不了) 浏览器的窗口尺寸变化(因为回流是根据视口的大小来计算元素的位置和大小的) 注意:回流一定会触发,而不一定会回流 根据改变的范围和程度,渲染树中或大或小的部分需要重新计算 减少回流 好了,到了我们今天的重头戏,前面说了这么多背景和理论知识,接下来让我们谈谈如何减少回流。 最小化和重排 由于和重排可能代价比较昂贵,因此最好就是可以减少它的发生次数。 css3硬件加速(GPU加速) 比起考虑如何减少回流,我们更期望的是,根本不要回流。这个时候,css3硬件加速就闪亮登场啦!!

    1.7K21发布于 2018-12-25
  • 来自专栏采云轩

    浏览器渲染之回流

    前言 回流是前端开发的高频词汇之一,你可以在各种面经,性能优化相关文章可以看到,但是很多都是草草带过。本文带你从浏览器渲染流程中了解回流的原理。 回流的原理 webkit 将渲染树中的元素成为渲染对象,每一个渲染对象都代表了一个矩形区域,通常对应相关节点的css框,包含宽度、高度和位置等几何信息。 如何减少回流 上面我们已经介绍了像素管道相关内容,知道回流的代价是非常昂贵的,如果我们不停的在改变页面的布局,就会造成浏览器耗费大量的开销在进行页面的计算,对用户体验非常的不友好。 减少回流前端性能优化重要手段之一。 减少强制同步布局 避免频繁读取会引发回流/的属性,如果确实需要多次使用,就用一个变量缓存起来。 ,浏览器会维护一个队列,把所有引起回流的操作放入队列中,如果队列中的任务数量或者时间间隔达到一个阈值的,浏览器就会将队列清空,进行一次批处理,这样可以把多次回流变成一次。

    2.2K40发布于 2021-09-30
  • 来自专栏前端之心

    你真的了解回流

    浏览器的渲染过程 本文先从浏览器的渲染过程来从头到尾的讲解一下回流,如果大家想直接看如何减少回流,优化性能,可以跳到后面。 既然知道了浏览器的渲染过程后,我们就来探讨下,何时会发生回流。 何时发生回流 我们前面知道了,回流这一阶段主要是计算节点的位置和几何信息,那么当页面布局和几何信息发生变化的时候,就需要回流。 减少回流 好了,到了我们今天的重头戏,前面说了这么多背景和理论知识,接下来让我们谈谈如何减少回流。 最小化和重排 由于和重排可能代价比较昂贵,因此最好就是可以减少它的发生次数。 css3硬件加速(GPU加速) 比起考虑如何减少回流,我们更期望的是,根本不要回流。这个时候,css3硬件加速就闪亮登场啦!! 划重点: 1. 我通过使用chrome的Performance捕获了动画一段时间里的回流情况,实际结果如下图: 添加描述 从图中我们可以看出,在动画进行的时候,没有发生任何的回流

    5.4K50发布于 2018-12-19
  • 来自专栏杨龙飞前端

    页面回流(重排)以及优化

    ; 5、页面渲染初始化; 6、浏览器窗口尺寸改变——resize事件发生时; 注意:回流必将引起重,而不一定会引起回流。 var s = document.body.style; s.padding = "2px"; // 回流+ s.border = "1px solid red"; // 再一次 回流+ s.color = "blue"; // 再一次 s.backgroundColor = "#ccc"; // 再一次 s.fontSize = "14px"; // 再一次 回流+ // 添加node ; 如何减少回流 减少回流其实就是需要减少对render tree的操作(合并多次多DOM和样式的修改),并减少对一些style信息的请求,尽量利用好浏览器的优化策略。具体方法有: 1. 让要操作的元素进行”离线处理”,处理完后一起更新 a) 使用DocumentFragment进行缓存操作,引发一次回流; b) 使用display:none技术,只引发两次回流; c) 使用

    1.2K40发布于 2018-06-15
  • 来自专栏Czy‘s Blog

    浏览器重回流

    回流 回流是浏览器渲染的时候进行的操作,当页面内容发生改变的时候,就会触发或者回流 当渲染树中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color ,则就叫称为重Repaint,不一定触发回流。 每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建渲染树,回流一定触发。 Reflow的成本比Repaint的成本高得多的多。 绝对定位 对于复杂动画效果,由于会经常的非常频繁的引起回流,可以使用绝对定位,让它脱离文档流,否则会引起父元素以及后续元素频繁的回流。 CSS3硬件加速 CSS3硬件加速也就是GPU加速,可以transform、opacity、filters这些动画不会引起回流,但是对于动画的其它属性,比如background-color这些,还是会引起回流

    1.3K20发布于 2020-08-27
  • 来自专栏乱码李

    Web 性能优化-页面回流(重排)

    回流 当 render tree 中的一部分(或全部)因为元素的规模尺寸、布局、显示/隐藏等改变而需要重新构建,这个过程称作回流(reflow)。页面第一次加载的时候,至少发生一次回流。 因此回流必将引起重,而不一定会引起回流。 Reflow 的成本比 Repaint 高得多的多。 // 回流+ 浏览器 如果向上述代码中那样,浏览器不停地回流+,很可能性能开销非常大,实际上浏览器会优化这些操作,将所有引起回流的操作放入一个队列中,等待队列达到一定的数量或者时间间隔,就 flush 这个队列,一次性处理所有的回流。 参考资料 16毫秒的优化 浏览器渲染页面过程页面优化 页面回流以及优化

    1.4K20发布于 2021-11-26
  • 来自专栏站长的编程笔记

    【说站】JavaScript如何减少回流

    JavaScript如何减少回流 方法说明 1、用transform代替top。 2、用visibility换display。 none,前者只引起重,后者引起回流。 5、动画实现的动画速度越快,回流次数越多。 也可以使用requestAnimationFrame。 6、将频繁重回流的节点设置为图层。 var body = document.getElementsByTagName('body')[0]    var h = body.offsetHeight; } 以上就是JavaScript减少回流的方法

    80410编辑于 2022-11-24
  • 来自专栏前端开发

    客户端渲染页面、DOM回流、避免DOM的回流

    客户端渲染页面 浏览器渲染页面的步骤 解析HTML,生成DOM树,解析CSS,生成CSSOM树 将DOM树和CSSOM树结合,生成渲染树(Render Tree) Layout(回流):根据生成的染树 ,计算它们在设备视口(viewport)内的确切位置和大小,这个阶段是回流 Painting(): 根据潼染树以及回流得到的几何信息,得到节点的绝对像素 Display:将像素发送给GPU,展示在页面上 DOM回流 :元素样式的改变(但宽高、大小、位置等不变) 回流:元素的大小或者位置发生了变化(当页面布局和几何信息发生变化的时候),触发了重新布局,导致渲染树重新计算布局和渲染 **注意 :**回流一定会触发,而不一定会回流 前端性能优化之 : 避免DOM的回流 放弃传统操作dom的时代,基于vue/react开始数据影响视图模式 分离读写操作(现代的浏览器都有渲染队列的机制

    35310编辑于 2024-03-20
  • 来自专栏Web行业观察

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

    浏览器的渲染过程 本文先从浏览器的渲染过程来从头到尾的讲解一下回流,如果大家想直接看如何减少回流,可以跳到后面。 既然知道了浏览器的渲染过程后,我们就来探讨下,何时会发生回流。 何时发生回流 我们前面知道了,回流这一阶段主要是计算节点的位置和几何信息,那么当页面布局和几何信息发生变化的时候,就需要回流。 减少回流 好了,到了我们今天的重头戏,前面说了这么多背景和理论知识,接下来让我们谈谈如何减少回流。 最小化和重排 由于和重排可能代价比较昂贵,因此最好就是可以减少它的发生次数。 css3硬件加速(GPU加速) 比起考虑如何减少回流,我们更期望的是,根本不要回流。这个时候,css3硬件加速就闪亮登场啦!! 总结 本文主要讲了浏览器的渲染过程、浏览器的优化机制以及如何减少甚至避免回流,希望可以帮助大家更好的理解回流

    2.4K40发布于 2018-12-17
领券