前端性能优化之减少重排,对比重排与重绘

理解页面重排(Reflow)与重绘(Repaint):优化前端性能的关键 在前端开发中,页面性能优化是一个永恒的话题。而页面重排(Reflow)和重绘(Repaint)是影响页面性能的两个核心概念。理解它们的机制以及如何优化,可以帮助我们构建更流畅、响应更快的网页应用。本文将深入探讨重排和重绘的原理、触发条件以及优化策略。 阅读详情

在前端开发的过程中,性能优化是一个最常见的问题,重绘与重排也是提到优化时不可忽视的一块。

那么什么是重绘与重排呢,在解释重绘与重排之前,我们首先需要先了解清楚浏览器的渲染过程, 下面先上一张比较常见的渲染过程图:

 

根据上图我们可以看到和总结出浏览器的渲染大致分为以下五个步骤:

  1. DOM Tree: 浏览器根据HTML解析出DOM Tree

  2. Style Rules:根据CSS解析出Style Rules

  3. Render Tree: 将DOM Tree与Style Tree二者关联生成Render Tree

  4. Layout: 根据Render Tree计算每个节点的信息,即节点在屏幕上的显示位置

  5. Painting :根据计算好的信息绘制整个页面

很多人在开发的过程中总是听说,在浏览器的渲染过程中,DOM 的操作是最消耗性能的,为什么呢?因为大部分的JavaScript DOM操作会导致一系列的重绘。

那么什么是重绘与重排呢:简单来说,我的理解是,

重绘(repaint):当元素的外观属性发生变化,即元素的颜色,背景色发生改变但没有影响到dom树的位置改变的时候,会触发重绘;

重排(reflow):当页面内的元素尺寸发生了变化,导致部分或者全部DOM树,渲染树需要重新更新,会触发重排, 重排又称为回流;

一般情况下,页面的重排必定会导致重绘,但重绘不一定会导致重排。

触发重排的条件,具体来说有以下几点:

       1.页面渲染初始化;

       2.添加与删除DOM元素;

  3.元素位置的改变,或者使用动画;

  4.元素的尺寸发生改变;

  5.浏览器窗口尺寸的变化(resize事件发生时);

       6.文本内容被改变或者图片被不同尺寸的图片替换;

  7.读取某些元素属性:(offsetLeft/Top/Height/Width, clientTop/Left/Width/Height, scrollTop/Left/Width/Height, width/height, getComputedStyle(), currentStyle(IE) )

一般在我们的开发过程中,当DOM元素的操作不可避免时, 我们可以通过以下方式来尽量减少重绘与重排,重点是减少重排,主要的思路是, 将多次的DOM 操作合并为一次,或者使需要被操作的元素脱离文档流以减少浏览器重绘与重排的次数,下面的这些操作都是通过减少重排重绘来实现性能优化的:

      1.元素的多次样式修改合并成一次修改;

      2.如需进行对DOM节点进行多次操作,先将其脱离文本流之后再进行多次操作;

      3.table布局的渲染与普通DOM节点的操作相比,性能消耗更大,如果可以,尽量减少table布局的使用;

      4.缓存常用的布局信息;

      5.兼容IE时减少使用hover;

      6.动画使用window.requestAnimationFrame(),window.requestAnimationFrame() 这两个方法调节重新渲染;

      7.使用虚拟dom脚本库,例如react或者snabbdom等。

 

 

参考链接:

网页性能管理,重绘与重排:https://www.jianshu.com/p/f69b476a7200 

dom操作为什么耗性能: https://segmentfault.com/a/1190000014070240 

CSS 重排与重绘详解 重排和重绘是浏览器渲染页面的必要过程,但过度频繁的操作会严重影响性能。批量处理样式修改,避免零散操作;优先使用transform和opacity实现动画;减少强制重排的场景,合理规划 DOM 结构。通过以上优化,可显著降低页面的性能消耗,提升用户体验,尤其在移动端和复杂交互场景中效果明显。 阅读详情

相关推荐

vivado 编译ADI AD9361 TCL脚本生成hdl工程

(4)输入"source ../../scripts/adi_make.tcl"命令(仅双引号内部命令,不包含双引号),个人理解:该命令用来加载当前所需要编译工程所需要各功能模块的信息,因为每个工程需要不同的功能模块,比如有的需要gpio模块,有的不需要gpio模块,这些模块上前面路径的library也同样以TCL脚本形式存在,当有需要时才进行编译,怎么知道当前工程需要什么模块呢就是通过"source ../../scripts/adi_make.tcl"(仅双引号内部命令,不包含双引号)命令实现。

weixin_40586423的博客 808

day14 - JavaScript中文档碎片、重绘与回流

一、重绘与回流 重绘(repaint):当元素样式的改变不影响布局时,浏览器将使用重绘对元素进行更新,此时由于只需要 UI 层面的重新像素绘制,因此损耗较少。 常见的重绘操作: 1.改变元素颜色 2.该百年元素背景色 3.more… 回流(reflow):又叫重排(layout),类似于插队。当元素的尺寸、结构或者触发某些属性时,浏览器会重新渲染页面,称为回流。此时,浏览器需要重新经过计算,计算后还需要重新页面布局,因此是较重的操作。 常见的回流操作: 1.页面初次渲染 2.浏览器窗口大小改变 3.元素尺

小高今天早睡了吗? 673

揭秘AI人工智能中Stable Diffusion的模型微调技巧

Stable Diffusion作为一种强大的文本到图像生成模型,在艺术创作、设计、娱乐等多个领域展现出了巨大的应用潜力。然而,其默认的模型输出可能无法满足特定用户或特定场景的个性化需求。本文章的目的在于深入揭秘Stable Diffusion的模型微调技巧,让读者能够根据自己的需求对模型进行定制化调整,生成符合特定风格、主题或要求的图像。范围涵盖了从基础概念到实际操作,从理论原理到项目实战的全方位内容,旨在为读者提供一个系统且深入的学习指南。

大模型应用工坊 949

什么是重排与重绘,如何减少重排

10.查询某些属性或调用某些计算方法:offsetWidth、offsetHeight 等,除此之外,当我们调用 getComputedStyle 方法,或者 IE 里的 currentStyle 时,也会触发重排,原理是一样的,都 为求一个 “即时性” 和 “准确性”。浏览器会维护一个队列,把所有会引起重排、重绘的操作放入这个队列,等队列中的操作到了一定数量或者到了一定的时间间隔,浏览器就会 flush 队列,进行一个批处理。1. 减少直接操作 DOM 元素。

WZH15075051915的博客 1487

第10章《VTK自定义部件Widget》

是用于交互式操作 3D 场景的组件,例如移动对象、调整尺寸、创建标注等。VTK 提供了一些内置的 Widget,如。,用户可以点击鼠标,在 3D 场景中放置一个点。负责绘制一个点,并控制其颜色、大小等。,可用于 3D 标注、对象拾取等应用!等,但在某些应用中,我们需要。这样,我们就创建了一个。

yumeiguo的博客 523

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

【WorkBuddy专栏68】HY3绕路部署vsDS4直击根因——一次真实踩坑揭露两个AI模型的推理差距

AI人人懂 559

如何减少重绘和重排

浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理。这样就会让多次的回流、重绘变成一次回流重绘。3、当dom元素position属性为fixed或者absolute, 可以通过css形变触发动画效果,此时是不会出发reflow的。2、尽量减少table使用,table属性变化使用会直接导致布局重排或者重绘。4、不要把 DOM 结点的属性值放在一个循环里当成循环里的变量。

青山不改,绿水长流。 2085

135、高通 ChromaTix 调优工具入门:参数含义、调优流程与效果对比

本文介绍了高通ChromaTix色彩调优工具的核心使用要点:1. ChromaTix是位于ISP管线中的色彩处理系统,核心任务是将原始色彩映射为符合人眼感知的"舒适"效果;2. 重点解析了饱和度、色调、亮度相关饱和度等关键参数的实际含义和调试陷阱;3. 分享了四步调优流程,强调需要基于多场景数据验证;4. 通过案例展示了参数调整带来的色彩改善效果;5. 总结了实用建议,包括保持单一变量调试、量化评估色差、关注极端场景表现等。文章指出ChromaTix调优是平衡不同场景需求的"妥协艺术",需要结合客观数据和主

sundong_81的博客 107

前端性能优化之减少重排和重绘

首先需要了解一下浏览器渲染HTML的大致过程: (1)HTML被HTML解析器解析成DOM Tree, css则被css解析器解析成CSSOM Tree(并行解析)。 (2)DOM Tree和CSSOM Tree解析完成后,被合并到一起,形成渲染树(render Tree)。 (3)重排:节点信息计算,即根据渲染树计算每个节点的几何信息(大小及位置)。 (4)重绘:渲染绘制,即根据计算好的信息绘制...

CC_Together的博客 2783

在 SAP BTP 中为 SAP AI Core 创建 Service Instance 和 Service Key 的完整实战指南

摘要:本文详细介绍了在SAP BTP上创建AI Core服务实例和密钥的关键步骤,这是实现ABAP系统与Gen AI大语言模型集成的核心技术环节。文章通过一个制造业财务问答场景的案例,系统梳理了从前提条件准备、架构理解到具体操作的全过程,重点解析了service instance创建、X.509证书配置等关键节点。特别强调了Extended计划选择、证书格式等易错点,为ABAP开发人员实现Gen AI场景提供了实用指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

【FDTD】仿真目录(共计 16 篇)

对于完美吸收型边界条件,有时候我们需要设置将仿真结构穿过边界条件区域,具体原因可以阅读下文。在进行 S 参数扫描时,当考虑到材料的色散特性时,我们可以如下文一样选择计算群延迟。仿真,我们需要构建仿真结构与仿真区域,对于它们的尺寸,应该遵循下文进行设定。中存在多种不同的网格类型,具体可以参考下文,这部分内容仅作了解即可。尺寸的设置问题,对于 mesh 的最小尺寸,可以参考下文。的边界条件设置也十分重要,下文中我们对边界条件进行总结。仿真中我们可以设定参与仿真的模式数量,可以参考下文。尺寸的实例,详见下文。

u011699626的博客 503

什么是重排、重绘?以及如何去避免重排、重绘?

什么是重绘、重排,重绘重排的区别,以及怎么避免重排重绘?

qq_51679817的博客 2027

BAT031:按列表名单将路径a下的文件夹批量剪切到路径b

摘要:按列表名单将路径a下的文件夹批量剪切到路径b。

qq_31762031的博客 1218

2021-3-29 前端性能优化相关措施

性能优化措施 1.减少重排和重绘 , 避免多次直接操作DOM,可以采用document.createDocumentFragment()文档片段,直接替换 只会触发一次。 修改样式的时候,如果存在多次修改同一元素的宽高等,建议直接赋值class只会触发一次重排 缓存布局高度属性,比如offset/clientHeight这种,会重置渲染队列,强制触发重排 参考 前端性能优化之重排和重绘 2.减少HTTP请求 1.虚拟DOM和操作真实DOM性能哪个好? 简单来说,虚拟DOM的最大优势,不是性能好,而是优化

まどか 204

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

前端开发新趋势:CSS动画与性能优化全解析

CSS 动画是前端开发中必备的技能,它能带来流畅的用户体验,但也需要注重性能优化。通过合理使用。

一如老师 1242

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

回流重绘太耗性能?用DocumentFragment和Vue keep-alive轻松优

如果你曾在凌晨两点盯着 Performance 面板那一根根红色柱子怀疑人生,恭喜你,今天咱们就把这根“性能达摩克利斯之剑”拆成零件,再装成一把瑞士军刀——DocumentFragment 和 keep-alive 双剑合璧,专治各种“页面卡顿不服”。那一刻,我深刻体会到什么叫“代码写的不是逻辑,是浏览器的遗书”。今晚 12 点,Performance 面板如果还是一片红海,你来找我,我请你喝最苦的咖啡,再一起把红色涂成绿色——让帧率 60,让风扇静音,让用户多留一秒,让世界更美好。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 934

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

中级前端进阶方向 第十步)深入 浏览器性能优化(渲染机制、内存泄漏定位、异步优化),附案例源码

《中级前端进阶指南》系统梳理了JavaScript核心技术栈与性能优化方向。核心内容包括:深入理解事件循环、原型链、闭包、Proxy等高级特性;掌握Promise、Generator、Async/Await等异步编程范式;模块化与装饰器应用实践。延伸部分覆盖工厂函数、状态管理、防抖节流等实用技巧。性能优化专题详细解析浏览器渲染机制(关键路径优化、GPU加速)、内存泄漏定位(闭包/事件/定时器排查)、异步优化策略(分片计算、WebWorker)。通过配套源码案例,帮助开发者构建完整的前端性能优化知识体系。

DeppBing的博客,全栈修炼记|记录一个开发者的进化轨迹 1573

dom响应慢_前端性能优化--为什么DOM操作慢?

作为一个前端,不能不考虑性能问题。对于大多数前端来说,性能优化的方法可能包括以下这些:减少HTTP请求(合并css、js,雪碧图/base64图片)压缩(css、js、图片皆可压缩)样式表放头部,脚本放底部使用CDN(这部分,不少前端都不用考虑,负责发布的兄弟可能会负责搞好)缓存……等等……有兴趣的同学,可以自行搜索雅虎关于前端优化的十四条规则。但这些规则当中,有多少是需要前端工程师付诸实践的?就...

weixin_39923599的博客 271

Fay框架前端性能优化技术分享:视频教程

在数字化快速发展的今天,用户对前端应用的性能要求越来越高。Fay作为一款开源数字人框架,其前端性能直接影响用户体验。本教程将从多个方面详细介绍Fay框架前端性能优化的实用技术,帮助开发者提升应用响应速度和运行效率。 ## 前端架构概览 Fay框架的前端部分主要由CSS样式文件和JavaScript脚本文件构成,它们共同协作构建了用户与数字人交互的界面。 ### 主要文件结构 前端核心文件集...

gitblog_00942的博客 347

JS与jQuery实战:DOM操作与性能优化指南

DOM操作是前端开发的核心技术之一,它通过JavaScript与HTML文档交互,实现动态页面效果。理解DOM树结构和节点操作方法,是掌握前端开发的基础。jQuery作为经典库,通过简洁的选择器和链式调用,大幅提升了DOM操作效率。在性能优化方面,减少重绘(reflow)和事件委托是关键技巧,这些原理同样适用于现代框架开发。本文通过Todo应用案例,对比原生JS与jQuery实现,展示如何高效处理DOM更新、本地存储等常见需求,特别适合需要维护传统项目或快速开发小型应用的前端工程师。

weixin_33971721的博客 195

重绘与重排

重排与重绘都是非常消耗性能的操作,大多数重排都会导致页面的重新渲染,是导致DOM脚本(Script)加载速度慢的主要原因之一,尤其是在低性能设备上。

白女士的博客 1693

CSS重排与重绘总结

昨天面试被问到了什么是重排和重绘,回答的并不是很好,下面来总结一下:关于CSS重排和重绘的概念,在制作中考虑浏览器的性能,减少重排能够节省浏览器对其子元素及父类元素的重新渲染;避免过分的重绘也能节省浏览器性能;优化动画,使用3D启用GPU硬件加速;慎重选择高消耗的样式,如box-shadow、border-radius、transform、css filters等。 浏览器的渲染机制 浏览器渲染展...

张木期的博客 4695

前端的重绘重排

前端重排重绘详解

2503_90377662的博客 1138

重绘和重排

DOM树:表示页面结构。 渲染树:表示DOM节点如何显示。 简要介绍了重绘和重排的定义,触发条件。

WittyLu的博客 4457

Searx前端性能优化:减少重绘与重排的技巧

在现代Web应用中,前端性能直接影响用户体验和系统响应速度。Searx作为开源的元搜索引擎,其前端架构采用了模块化设计,主要包含主题样式、模板结构和JavaScript交互三个核心部分。本文将从CSS优化、DOM操作和资源加载三个维度,详细介绍减少浏览器重绘(Repaint)与重排(Reflow)的实用技巧,并结合Searx项目的具体实现进行说明。 ## 一、CSS优化:避免布局抖动 ### ...

gitblog_01146的博客 695
上一篇: 判断某变量是否为数组数据类型
下一篇: 纯css 利用多栏布局实现瀑布流 简略版
cjFrontEnd
博客等级 码龄9年 8粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值