首页 > 其他分享 >重排和重绘的区别,什么情况下会触发这两种情况

重排和重绘的区别,什么情况下会触发这两种情况

时间:2024-06-01 22:33:57浏览次数:15  
标签:触发 浏览器 元素 重排 下会 重绘 属性

重排(Reflow)和重绘(Repaint)是Web前端开发中关于浏览器渲染机制的两个核心概念。它们之间的主要区别以及触发条件如下:

重排(Reflow)

定义

重排也称为布局(Layout),当元素的几何属性(如宽、高、位置)或内容、可见性发生变化时,浏览器需要重新计算元素及其子元素的布局信息,包括它们的位置和尺寸。这个过程会导致浏览器构造一个新的渲染树,然后重新计算布局123。

触发条件

  1. 改变元素的尺寸(width/height)、外边距(margin)、内边距(padding)等。
  2. 更改元素的位置,如通过修改left/top值。
  3. 添加或删除可见DOM元素。
  4. 浏览器窗口大小改变(resize事件)1234。

示例代码


// 改变元素的宽度,这将触发重排
var element = document.getElementById('myDiv');
element.style.width = '50%';

重绘(Repaint)

定义

重绘是指元素的外观发生了改变,但不影响布局,如颜色、背景色、透明度等非几何属性的变化。在这种情况下,浏览器不需要重新计算元素的位置和大小,仅需要刷新受影响部分的像素1234。

触发条件

  1. 改变背景色、前景色、边框颜色等。
  2. 更改CSS透明度。
  3. 图像的SRC属性更改(加载新的图片)134。

示例代码


// 改变元素的背景色,这将触发重绘
document.querySelector('#myDiv').style.backgroundColor = 'blue';

两者之间的关系

  • 重排必定会引发重绘,但重绘不一定会引发重排23。
  • 浏览器的渲染队列会尝试将多个重排或重绘操作合并成一次,以优化性能2。

优化建议

为了减少重排和重绘带来的性能影响,可以采取以下措施:

  1. 避免频繁使用style直接修改样式,最好采用修改class类名的方式2。
  2. 使用CSS动画或过渡代替直接改变元素的属性4。
  3. 避免频繁读取会引发回流/重绘的属性,如果确实需要多次使用,就用一个变量缓存起来2。
  4. 利用CSS3的transform、opacity、filter等属性实现合成的效果,可以通过GPU加速来提高渲染速度24。

请注意,在开发过程中,应尽量减少不必要的重排和重绘操作,特别是在连续执行多个DOM操作时,可以尝试合并操作并利用浏览器提供的性能优化API1。

最后,请注意,这些优化建议和示例代码是基于当前Web开发标准和浏览器渲染机制的一般性描述。在实际应用中,可能需要根据具体的浏览器版本、项目需求以及性能瓶颈进行针对性的优化。

标签:触发,浏览器,元素,重排,下会,重绘,属性
From: https://blog.csdn.net/zhang20040217/article/details/139380614

相关文章

  • 工控现场什么情况下会采用Modbus转Profinet网关
    工控现场什么情况下会采用Modbus转Profinet网关一、原因:工控现场需要将Modbus转换为Profinet协议,这是由于在工业控制领域中,不同设备之间的通信协议多样,而Modbus和Profinet分别代表着两种不同的通信协议。Modbus是一种最常见的工业通信协议,但其速度较慢,数据量有限,在一些需要快速......
  • 阿里重排论文PRM 《Personalized Re-ranking for Recommendation》
    和DLCM做法类似,都是使用序列模型对rank后的结构做rerank,不同点是PRM使用了transformencoder来建模,并且使用了用户预训练向量和位置向量最后一层使用了softmax来计算每个item被点击的概率(论文提到使用click作为label,也就是所存在多个label为1的情况,不知道有没有做什么特殊处理),并......
  • 重排模型DLCM
    论文名:LearningaDeepListwiseContextModelforRankingRefinement背景在搜索场景下,给定一个查询q,q和d特征的向量表示x(q,d),rank阶段的loss可以表示为:其中:Q是query的集合,D是doc集合,f是rank模型函数可以看到,传统的rank模型是一种point-wise的建模方法,没有考虑不同doc之间......
  • OSPF在什么情况下会进行Router ID的重新选取?
    RouterID在OSPF中扮演着至关重要的角色,RouterID用于区分不同的路由器,确保在整个OSPF域内每个路由器都有一个唯一的标识。在OSPF邻居关系的建立过程中,RouterID被用于识别和区分邻居路由器。OSPF协议使用RouterID进行路由计算和路由更新,以确定最佳的路径。RouterID也用于标......
  • 小白PDF阅读器重排版时的自动提取背景色功能介绍及实现
    小白PDF阅读器在1.35之前的版本对于有深色背景的页面重拍版时并不太完美。对于深色背景区域主要表现在不能分割排版和重排后页面元素割裂感明显。小白PDF阅读器在1.35版本主要针对这两个问题进行了优化!最终效果对比图如下自动重排版彩色部分内容,并提取彩色背景自动提取背景......
  • 回流和重绘的区别
    回流(reflow)和重绘(repaint)是浏览器渲染页面的两个不同过程,它们在概念上是分开的,但在实际发生时可能会有所交互。以下是两者区别:触发条件不同。回流发生在当页面的布局和几何信息发生改变时,例如添加或删除DOM元素、元素位置改变、元素尺寸改变(如边距、填充、边框、宽......
  • L2-022 重排链表
    原题链接题解找到终点,然后终点往前移,起点往后移,奇数时输出终点所在位置..直到起点终点重合,这时输出尾节点是-1code#include<bits/stdc++.h>usingnamespacestd;structnode{intdata,next,from;}a[100005];intmain(){intstart,n;cin>>start>>n;......
  • 讨论课——级数重排与黎曼猜想的介绍
    ......
  • 回流/重绘
    回流:布局引擎会根据各种样式计算每个盒子在页面上的大小与位置重绘:当计算好盒模型的位置、大小及其他属性后,浏览器根据每个盒子特性进行绘制浏览器解析渲染机制: 解析HTML,生成DOM树,解析CSS,生成CSSOM树将DOM树和CSSOM树结合,生成渲染树(RenderTree)Layout(回流)......
  • L2-022 重排链表(25分) c++代码
    给定一个单链表 L1​→L2​→⋯→Ln−1​→Ln​,请编写程序将链表重新排列为 Ln​→L1​→Ln−1​→L2​→⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。输入格式:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (......