CSS 页面重绘和回流

抖音视频数据抓取 最近经常有人问我抓取抖音视频的数据,问我一些很小白的问题,算法给他也不会用。 还是先抓包,获取需要的接口和参数,相关的算法在其它文章里面有描述。 搜索个视频看看 查看抓的包信息: 可以看到,这里是post请求... 阅读详情

页面重绘和回流以及优化

小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货。各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握..

在讨论页面重绘、回流之前。需要对页面的呈现流程有些了解,页面是怎么把html结合css等显示到浏览器上的,下面的流程图显示了浏览器对页面的呈现的处理流程。可能不同的浏览器略微会有些不同。但基本上都是类似的。

8_1

1.  浏览器把获取到的HTML代码解析成1个DOM树,HTML中的每个tag都是DOM树中的1个节点,根节点就是我们常用的document对象。DOM树里包含了所有HTML标签,包括display:none隐藏,还有用JS动态添加的元素等。

2. 浏览器把所有样式(用户定义的CSS和用户代理)解析成样式结构体,在解析的过程中会去掉浏览器不能识别的样式,比如IE会去掉-moz开头的样式,而FF会去掉_开头的样式。

3、DOM Tree 和样式结构体组合后构建render tree, render tree类似于DOM tree,但区别很大,render tree能识别样式,render tree中每个NODE都有自己的style,而且 render tree不包含隐藏的节点 (比如display:none的节点,还有head节点),因为这些节点不会用于呈现,而且不会影响呈现的,所以就不会包含到 render tree中。注意 visibility:hidden隐藏的元素还是会包含到 render tree中的,因为visibility:hidden 会影响布局(layout),会占有空间。根据CSS2的标准,render tree中的每个节点都称为Box (Box dimensions),理解页面元素为一个具有填充、边距、边框和位置的盒子。

4. 一旦render tree构建完毕后,浏览器就可以根据render tree来绘制页面了。

回流与重绘

1. 当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候。在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程成为重绘。

2. 当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。

注意:回流必将引起重绘,而重绘不一定会引起回流。

 

回流何时发生:

当页面布局和几何属性改变时就需要回流。下述情况会发生浏览器回流:

1、添加或者删除可见的DOM元素;

2、元素位置改变;

3、元素尺寸改变——边距、填充、边框、宽度和高度

4、内容改变——比如文本改变或者图片大小改变而引起的计算值宽度和高度改变;

5、页面渲染初始化;

6、浏览器窗口尺寸改变——resize事件发生时;

 

让我们看看下面的代码是如何影响回流和重绘的:

js 代码:
  1. var s = document.body.style;
  2. s.padding = "2px"; // 回流+重绘
  3. s.border = "1px solid red"; // 再一次 回流+重绘
  4. s.color = "blue"; // 再一次重绘
  5. s.backgroundColor = "#ccc"; // 再一次 重绘
  6. s.fontSize = "14px"; // 再一次 回流+重绘
  7. // 添加node,再一次 回流+重绘
  8. document.body.appendChild(document.createTextNode('abc!'));

说到这里大家都知道回流比重绘的代价要更高,回流的花销跟render tree有多少节点需要重新构建有关系,假设你直接操作body,比如在body最前面插入1个元素,会导致整个render tree回流,这样代价当然会比较高,但如果是指body后面插入1个元素,则不会影响前面元素的回流。

 

聪明的浏览器

从上个实例代码中可以看到几行简单的JS代码就引起了6次左右的回流、重绘。而且我们也知道回流的花销也不小,如果每句JS操作都去回流重绘的话,浏览器可能就会受不了。所以很多浏览器都会优化这些操作,浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理。这样就会让多次的回流、重绘变成一次回流重绘。

虽然有了浏览器的优化,但有时候我们写的一些代码可能会强制浏览器提前flush队列,这样浏览器的优化可能就起不到作用了。当你请求向浏览器请求一些 style信息的时候,就会让浏览器flush队列,比如:

1. offsetTop, offsetLeft, offsetWidth, offsetHeight

2. scrollTop/Left/Width/Height

3. clientTop/Left/Width/Height

4. width,height

5. 请求了getComputedStyle(), 或者 IE的 currentStyle

当你请求上面的一些属性的时候,浏览器为了给你最精确的值,需要flush队列,因为队列中可能会有影响到这些值的操作。即使你获取元素的布局和样式信息跟最近发生或改变的布局信息无关,浏览器都会强行刷新渲染队列。

如何减少回流、重绘

减少回流、重绘其实就是需要减少对render tree的操作(合并多次多DOM和样式的修改),并减少对一些style信息的请求,尽量利用好浏览器的优化策略。具体方法有:

1. 直接改变className,如果动态改变样式,则使用cssText(考虑没有优化的浏览器)

js 代码:
  1. // 不好的写法
  2. var left = 1;
  3. var top = 1;
  4. el.style.left = left + "px";
  5. el.style.top = top + "px";// 比较好的写法
  6. el.className += " className1";
  7.  
  8. // 比较好的写法
  9. el.style.cssText += ";
  10. left: " + left + "px;
  11. top: " + top + "px;";

2. 让要操作的元素进行”离线处理”,处理完后一起更新

a) 使用DocumentFragment进行缓存操作,引发一次回流和重绘;
b) 使用display:none技术,只引发两次回流和重绘;
c) 使用cloneNode(true or false) 和 replaceChild 技术,引发一次回流和重绘;

 

3.不要经常访问会引起浏览器flush队列的属性,如果你确实要访问,利用缓存

js 代码:
  1. // 别这样写,大哥
  2. for(循环) {
  3. el.style.left = el.offsetLeft + 5 + "px";
  4. el.style.top = el.offsetTop + 5 + "px";
  5. }
  6.  
  7. // 这样写好点
  8. var left = el.offsetLeft,
  9. top = el.offsetTop,
  10. s = el.style;
  11. for (循环) {
  12. left += 10;
  13. top += 10;
  14. s.left = left + "px";
  15. s.top = top + "px";
  16. }

4. 让元素脱离动画流,减少回流的Render Tree的规模

js 代码:
  1. $("#block1").animate({left:50});
  2. $("#block2").animate({marginLeft:50});

实例测试

最后用2个工具对上面的理论进行一些测试,分别是:dynaTrace(测试ie),Speed Tracer(测试Chrome)。

第一个测试代码不改变元素的规则,大小,位置。只改变颜色,所以不存在回流,仅测试重绘,代码如下:

html 代码:
  1. <body>
  2. <script type="text/javascript">
  3. var s = document.body.style;
  4. var computed;
  5. if (document.body.currentStyle) {
  6. computed = document.body.currentStyle;
  7. } else {
  8. computed = document.defaultView.getComputedStyle(document.body, '');
  9. }
  10.  
  11. function testOneByOne(){
  12. s.color = 'red';;
  13. tmp = computed.backgroundColor;
  14. s.color = 'white';
  15. tmp = computed.backgroundImage;
  16. s.color = 'green';
  17. tmp = computed.backgroundAttachment;
  18. }
  19. function testAll() {
  20. s.color = 'yellow';
  21. s.color = 'pink';
  22. s.color = 'blue';
  23. tmp = computed.backgroundColor;
  24. tmp = computed.backgroundImage;
  25. tmp = computed.backgroundAttachment;
  26. }
  27. </script>
  28. color test <br />
  29. <button onclick="testOneByOne()">Test One by One</button>
  30. <button onclick="testAll()">Test All</button>
  31. </body>

testOneByOne 函数改变3次color,其中每次改变后调用getComputedStyle,读取属性值(按我们上面的讨论,这里会引起队列的 flush),testAll 同样是改变3次color,但是每次改变后并不马上调用getComputedStyle。
我们先点击Test One by One按钮,然后点击 Test All,用dynaTrace监控如下:

8_2

上图可以看到我们执行了2次button的click事件,每次click后都跟一次rendering,2次click函数执行的时间都差不多, 0.25ms,0.26ms,但其后的rendering时间就相差一倍多。(其实很多时候,前端的性能瓶颈并不在于JS的执行,而是在于页面的呈现,这种情况在富客户端中更为突出)。我们再看图的下面部分,这是第一次rendering的详细信息,可以看到里面有2行是 Scheduleing layout task,这个就是我们前面讨论过的浏览器优化过的队列,可以看出我们引发2次的flush。

8_3

再看第二次rendering的详细信息,可以看出并没有Scheduleing layout task,所以这次rendering的时间也比较短。

测试代码2:这个测试跟第一次测试的代码很类似,但加上了对layout的改变,为的是测试回流。

html 代码:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1
  2. /DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. </head>
  6. <body>
  7. <script type="text/javascript">
  8. var s = document.body.style;
  9. var computed;
  10. if (document.body.currentStyle) {
  11. computed = document.body.currentStyle;
  12. } else {
  13. computed = document.defaultView.getComputedStyle(document.body, '');
  14. }
  15. function testOneByOne(){
  16. s.color = 'red';
  17. s.padding = '1px';
  18. tmp = computed.backgroundColor;
  19. s.color = 'white';
  20. s.padding = '2px';
  21. tmp = computed.backgroundImage;
  22. s.color = 'green';
  23. s.padding = '3px';
  24. tmp = computed.backgroundAttachment;
  25. }
  26. function testAll() {
  27. s.color = 'yellow';
  28. s.padding = '4px';
  29. s.color = 'pink';
  30. s.padding = '5px';
  31. s.color = 'blue';
  32. s.padding = '6px';
  33. tmp = computed.backgroundColor;
  34. tmp = computed.backgroundImage;
  35. tmp = computed.backgroundAttachment;
  36. }
  37. </script>
  38. color test <br />
  39. <button onclick="testOneByOne()">Test One by One</button>
  40. <button onclick="testAll()">Test All</button>
  41. </body>
  42. </html>

用dynaTrace监控如下:

8_4

这图可以看出,有了回流后,rendering的时间相比之前的只重绘,时间翻了3倍了,可见回流的高成本性啊。

大家看到时候注意明细处相比之前的多了个 Calcalating flow layout。

 

最后再使用Speed Tracer测试一下,其实结果是一样的,只是让大家了解下2个测试工具:

测试1:

8_5

 

图上第一次点击执行2ms (其中有50% 用于style Recalculation), 第二次1ms,而且第一次click后面也跟了2次style Recalculation,而第二次点击却没有style Recalculation。
但是这次测试发现paint重绘的时间竟然是一样的,都是3ms,这可能就是chrome比IE强的地方吧。

测试2:

8_6

从图中竟然发现第二次的测试结果在时间上跟第一次的完全一样,这可能是因为操作太少,而chrome又比较强大,所以没能测试明显结果出来。

但注意图中多了1个紫色部分,就是layout的部分。也就是我们说的回流。

参考文章:

浏览器的重绘[repaints]与重排[reflows]
高性能WEB开发–页面呈现、重绘、回流

关注WEB前端开发官方公众号

关注国内外最新最好的前端开发技术干货,获取最新前端开发资讯,致力于打造高质量的前端技术分享公众号

版权声明

本文仅用于学习、研究和交流目的,欢迎非商业性质转载。
转载请注明文章的完整链接: http://www.css88.com/archives/4996
作者(译者):  愚人码头 及 网站出处:CSS88.com
所属分类:  html+css,  JS,  前端资源 | 标签:  优化,  回流,  重绘 | 书签:  permalink.
1.FPGA开发软件安装——Vivado 目前主流的FPGA公司包括xilinx和Intel(原altera公司),其开发软件分别为vivado和quartusii。我们这里以目前国内应用较多的vivado为例进行安装讲解。 1、首先是去官网下载 Vivado 安装包:https://www.xilinx.com/support/download.html。下载这个最大的、支持所有的 OS 如 Windows/Linux 的安装包。 2、下载完之后,就进行解压。(最好在解压和安装之前都关闭所有的杀毒软件以防万一)。紧接着,解压完之后... 阅读详情

相关推荐

17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人

基于51单片机,避障,低于50CM报警,LED灯亮起,自动翻晒用光敏电阻,光照强度大,电机转动,相当于翻晒粮食,远程控制用按键代替,按下去电机就转动,相当于翻晒粮食,然后光照强度和超声波的距离都在LCD1602显示屏显示出来。

weixin_70360261的博客 1448

web页面性能优化系列(2)页面重绘和回流

浏览器渲染线程互斥的概念 问题:css渲染会影响js渲染性能嘛? 答:会的,原因是在浏览器渲染过程渲染css和渲染js各开启一个线程去工作但是这两个线程是互斥的,当渲染css在工作,渲染js的线程将会停止工作,则如果页面css频繁进行重绘势必会降低js的渲染速度 回流的概念 当rander tree中的一部分或者全部因为元素的规模尺寸,布局,隐藏等改变而需要重新构建render tree 这个过程...

qq_38560742的博客 550

Ubuntu 20.04下Cube-Studio云原生平台单机部署全攻略(附避坑指南)

本文详细介绍了在Ubuntu 20.04系统上单机部署Cube-Studio云原生平台的完整流程,包括环境准备、Docker配置、Rancher与Kubernetes集群部署以及Cube-Studio核心组件安装。特别提供了官方文档未涵盖的实战技巧和常见问题解决方案,帮助开发者高效完成部署并避免常见陷阱。

weixin_29313423的博客 464

chrome对页面重绘和回流以及优化进行优化

回流与重绘,当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(reflow)

周陆军的博客,分享it技术。 613

电磁波函数复数表示法:为什么物理学家偏爱e^(ikz)而非cos(kr-wt)?

本文深入解析了电磁波函数复数表示法(如e^(ikz))相较于传统余弦形式的巨大优势。通过欧拉公式,复数形式将复杂的三角运算转化为简洁的指数运算,在微分、积分、线性叠加及处理相位时展现出极高的计算效率,是物理学家和工程师分析波动现象的核心工具。

weixin_29094539的博客 498

AI时代,程序员何去何从?别慌,看完这篇你就明白了

AI时代程序员的发展方向 摘要:随着AI代码助手的普及,程序员行业面临变革。本文通过实际案例展示AI写代码的能力与局限:AI能生成基础功能代码(如RESTful API、数据处理脚本),但缺乏业务理解、系统设计和复杂逻辑处理能力。程序员的核心价值在于需求分析、架构设计、性能优化等高层能力。未来程序员应: 掌握AI工具提升效率 专注于创新和架构设计 培养业务理解能力 持续学习新技术 AI不会取代程序员,但会淘汰不会使用AI的程序员。建议开发者拥抱AI工具,将其作为助手而非威胁,聚焦高价值工作。

yunque_xianguang的博客 908

浏览器运行机制详解和回流和重绘

1、进程与线程 可以这样理解: - 进程是一个工厂,每个工厂有其独立的资源。 - 线程是工厂中的工人,可能只有一个,可能有好多个。多个工人协同完成工作。工人共享工作资源。 回到硬件上来理解: - 工厂的资源 -> 系统分配的内存。 - 工厂之间相互独立 -> 进程之间相互独立,也即进程分配到的内存相互独立,无法读到对方内存中的数据。 - 一个工厂有一个或多个工人 -> 一个线程中有一个或多个线程。 - 多个工人协同完成工作 -> 进程中多个线程协同完成工作。即线程之间能

weixin_43613849的博客 1064

MAPPO实战:从理论到代码的协作智能体训练指南

本文详细介绍了MAPPO算法在多智能体协作训练中的实战应用,从理论基础到代码实现全面解析。通过对比PPO与MAPPO的差异,深入讲解CTDE框架、网络架构设计、参数调优等关键环节,并提供实际项目中的调参经验和常见问题解决方案,帮助开发者快速掌握这一强化学习前沿技术。

weixin_42561040的博客 265

页面重绘和回流以及优化

在讨论页面重绘、回流之前。需要对页面的呈现流程有些了解,页面是怎么把html结合css等显示到浏览器上的,下面的流程图显示了浏览器对页面的呈现的处理流程。可能不同的浏览器略微会有些不同。但基本上都是类似的。 1.  浏览器把获取到的HTML代码解析成1个DOM树,HTML中的每个tag都是DOM树中的1个节点,根节点就是我们常用的document对象。DOM树里包含了所有HTML标签,包括d

每天积累一点,一年后你会发现,自己变化很大 2376

STM32H7 FOC控制时序优化与PWM中点更新策略

在永磁同步电机(PMSM)的磁场定向控制(FOC)系统中,控制时序精度是决定电流环带宽、观测器收敛性与动态响应能力的基础要素。其核心在于理解PWM生成、ADC采样与控制计算三者之间的硬件级时间耦合关系——尤其在中心对齐模式下,标准更新机制引入的半周期延迟会破坏电压-电流瞬时映射,导致滑模观测器失配与高频相位滞后。通过将PWM更新事件绑定至重复计数器(RCR)清零点,可实现控制指令在开关周期中点生效,使等效电压矢量中心与计算时刻严格对齐。该策略显著提升系统确定性,为20 kHz以上高频电流环提供物理支撑,并广

flink9streamer的博客 857

第十六章:载板制造工艺大全

本文详细介绍了IC载板制造的完整工艺流程,主要包括开料、钻孔、孔金属化、图形形成、层压、表面处理、成型和电测8大工序。每个工序都列出了关键参数和质量控制要点,如开料尺寸精度±0.1mm、激光钻孔孔径50-150μm、孔金属化铜厚20-30μm、图形形成线宽15μm±2μm等。文中还特别说明了MSAP工艺和沉金等特殊工艺的详细流程,以及成型精度和电测标准等关键指标。全文通过流程图和参数表格直观展示了IC载板制造的核心工艺和质量要求。

Open 184

浏览器重绘与回流

当元素的样式发生变化时,浏览器需要触发更新,重新绘制元素。这个过程中,有两种类型的操作,即重绘与回流。 重绘(repaint): 当元素样式的改变不影响布局时,浏览器将使用重绘对元素进行更新,此时由于只需要UI层面的重新像素绘制,因此 损耗较少 回流(reflow): 当元素的尺寸、结构或触发某些属性时,浏览器会重新渲染页面,称为回流。此时,浏览器需要重新经过计算,计算后还需要重新页面布局,因...

NewWent的博客 475

视觉Transformer实战 | Cross-Attention Multi-Scale Vision Transformer(CrossViT)详解与实现

Vision Transformer (ViT) 在计算机视觉领域取得了巨大成功,但标准 ViT 结构在处理不同尺度的视觉特征时存在局限性。双分支 ViT (Cross-Attention Multi-Scale Vision Transformer, CrossViT) 通过引入双分支结构来解决这一问题,能够同时捕获局部和全局视觉特征。本文将详细介绍 CrossViT 的技术原理,并使用 PyTorch 从零开始实现 CrossViT 模型。

盼小辉丶的博客 722

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

一、html页面的呈现流程 1.  浏览器把获取到的HTML代码解析成1个DOM树,HTML中的每个tag都是DOM树中的1个节点,根节点就是我们常用的document对象。DOM树里包含了所有HTML标签,包括display:none隐藏,还有用JS动态添加的元素等。 2. 浏览器把所有样式(用户定义的CSS和用户代理)解析成样式结构体,在解析的过程中会去掉浏览器不能识别的样式,

小亚美美的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

css编码规范及页面重绘和回流(重排)

讲到为什么要有一套css编码规范,首先是增强代码可读性提到代码效率,同时规范的css书写也对页面渲染速度有非常大的影响(涉及到重绘和回流),本文就从这两个方面来论述。 1、css命名规范 连字符css选择器规范: 1.长名称或词组可以使用中横线来为选择器命名。 2.不建议使用“_”下划线来命名CSS选择器 —览器兼容问题 (比如使用_tips的选择器命名,在IE6是无效的) —能良好区分JavaS...

qq_42039588的博客 463

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

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

DOM的重排(回流)和重绘(页面渲染过程、重排、回流和重绘概念及其触发操作、浏览器对重排和重绘的优化策略、其它优化方法(基于HTML、CSS方面优化、基于JavaScript方面优化))

目录 页面的渲染过程 重排(回流) 触发操作 重绘 触发操作 重排(回流)和重绘关系 浏览器本身优化策略 优化方法 HTML、CSS方面优化 Javascript方面优化 页面的渲染过程 (1)Javascript:通过JS实现动画效果或者操作DOM实现交互 (2)Style:计算样式,如果样式有改变将重新计算,并返回给DOM (3)Layout:根据DOM的样式,重新布局(重排、回流) (4)Paint:在多个渲染层上,对新的布局重新渲染(重绘) (5)Composi.

AIWWY的博客 795

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

前端学习笔记(1)之css 页面重绘和回流(重排)以及优化

##html页面的重现流程 浏览器把获取到的HTML代码解析成1个DOM树,HTML中的每个tag都是DOM树中的1个节点,根节点就是我们常用的document对象。DOM树里包含了所有HTML标签,包括display:none隐藏,还有用JS动态添加的元素等。 浏览器把所有样式(用户定义的CSS和用户代理)解析成样式结构体,在解析的过程中会去掉浏览器不能识别的样式,比如IE会去掉-moz开头的样式,而FF会去掉_开头的样式。 3、DOM Tree 和样式结构体组合后构建render tree.

前端下午茶 293

CSS3单独制作移动端页面布局方式(响应式布局)、重绘和回流

Bootstrap基于HTML、CSS和JAVASCRIPT,有预制样式库、组件和插件,使得Web开发更加快捷中文官网:http://www.bootcss.com/官网:http://getbootstrap.com/推荐使用:https://v5.bootcss.com/

Bulut0907 1500

页面重绘和回流

重绘是指浏览器根据元素的样式重新绘制像素的过程。重绘不会改变元素的几何属性,因此不会影响页面布局。回流是指浏览器重新计算元素的几何属性(如宽度、高度、位置等),并重新构建页面布局的过程。重绘(Repaint)**是浏览器渲染页面时的两个关键过程,它们直接影响页面的性能。**回流(Reflow)

dashuforever的博客 1005

空间发表说说html页面实现原理,HTML的解析和css的回流与重绘的自己初略理解

在别人的博客上看到了一篇讲的很生动的网页解析HTML的原理,并且还初步的说了一下css在渲染时候出现的reflow(回流)和repaint(重绘)。以下为引用他人博客中的内容。渲染就是浏览器把HTML代码以css定义的规则显示在浏览器窗口的过程。简单的说说自己对浏览器解析HTML时的基本过程吧。1. 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html...

weixin_42364640的博客 107

什么是浏览器的回流和重绘,以及如何减少回流和重绘

浏览器渲染原理 1.解析HTML,生成DOM树,解析CSS,生成CSSOM树 2.将DOM树和CSSOM树结合,生成渲染树(Render Tree) 回流: 回流是布局或者几何属性需要改变就称为回流。回流是影响浏览器性能的关键因素,因为其变化涉及到部分页面(或是整个页面)的布局更新。一个元素的回流可能会导致了其所有子元素以及DOM中紧随其后的节点、祖先节点元素的随后的回流。 重绘: 重绘是由于节点的几何属性发生改变或者由于样式发生改变但不会影响布局。例如outline, visibility, c

weixin_43956521的博客 970

如何最小化重绘(repaint)和回流(reflow)

什么是重绘 Repaint 和重排 (回流 reflow) 重绘 : 当元素的一部分属性发生改变,如外观,背景,颜色等不会引起布局变化,只需要浏览器根据元素的新属性重新绘制,是元素呈现心得外观叫做重绘 回流 : 当 render 树中得一部分或者全部因为大小边距等问题发生该案而需要DOM树重新计算得过程 具体浏览器解析渲染机制如下所示 : 解析HTML,生成DOM树,解析CSS,生成CSSOM树 将DOM树和CSSOM树结合,生成渲染(Render Tree) Layout(回流) : 根.

Qiemo_的博客 579

重绘和回流详细介绍

回流和重绘是浏览器渲染过程中不可避免的部分。理解它们的原理以及如何优化性能,对于构建高效的 web 应用是非常重要的。通过采取合适的优化技术,可以减少回流和重绘的次数,从而提高页面响应性,提升用户体验。

I'm兰陵王的博客 1037

HTML-事件机制-重绘和回流-<script>标签

目录1.事件冒泡和捕获2.重绘和回流背景知识1.浏览器使用流式布局模型 (Flow Based Layout)。2.浏览器会把HTML解析成DOM,把CSS解析成CSSOM,DOM和CSSOM合并就产生了Render Tree。3.有了RenderTree,我们就知道了所有节点的样式,然后计算他们在页面上的大小和位置,最后把节点绘制到页面上。4.由于浏览器使用流式布局,对Render Tree的计算通常只需要遍历一次就可以完成,但table及其内部元素除外,他们可能需要多次计算,通常要花3倍于同等元素的时间

Paper_Heaven的博客 945

怎么理解回流跟重绘?什么场景下会触发?

几何尺寸的变化(比如修改元素的宽、高或隐藏元素等)时,浏览器需要重新计算元素的几何属性,然后再将计算的结果绘制出来。在页面初始渲染阶段,回流不可避免的触发,可以理解成页面一开始是空白的元素,后面添加了新的元素使页面布局发生改变。),却并未影响其几何属性时,浏览器不需重新计算元素的几何属性、直接为该元素绘制新的样式,这里就仅仅触发了重绘。Layout(回流):根据生成的渲染树,进行回流(Layout),得到节点的几何信息(位置,大小)当你获取布局信息的操作的时候,会强制队列刷新,包括前面讲到的。

qq_48665028的博客 1116
上一篇: CSS-如何更好的使用BEM
下一篇: IE 与 Firefox 兼容问题
天意pt
博客等级 码龄14年 10粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值