重绘和重排

重绘:当元素的一部分属性发生改变,
如外观、背景、颜色等不会引起布局变化,
只需要浏览器根据元素的新属性重新绘制,
使元素呈现新的外观叫做重绘。 

重排(回流):当render树中的一部分或者全部因为大小边距等问题发生改变而需要DOM树重新计算的过程

所以简单的来说就是。不会引起布局的变化,叫做重绘。
会引起布局的变化,叫做重排(回流)
所以在我们平时写css的时候,还是要按照html中类的顺序来写。
否者可能会造成重排,重拍是需要消耗浏览器性能的哈。

引起重排的地方

1.添加、删除可见的dom
2.元素的位置改变
3.元素的尺寸改变(外边距、内边距、边框厚度、宽高)
4.页面渲染初始化
5.浏览器窗口大小改变
6.设置style属性
7.改变文字大小
8.添加/删除样式表
9.激活伪类,如:hover
10.操作class属性
11.内容的改变,(用户在输入框中写入内容也会)

#### 如何减少重绘(Repaint)和重排(reflow)

(1)不要一条一条地修改 DOM 的样式。可以先定义好 css 的 class,然后修改 DOM 的 className。
(2)不要把 DOM 结点的属性值放在一个循环里当成循环里的变量。
(3)为动画的 HTML 元件使用 fixed 或 absoult 的 position,那么修改他们的 CSS 是不会 reflow 的。
(4)千万不要使用 table 布局。因为可能很小的一个小改动会造成整个 table 的重新布局。
(5)不要在布局信息改变的时候做查询(会导致渲染队列强制刷新)
(6)用translate替代top改变
(7)用opacity替代visibility(在独立图层下优化重绘)

原文地址:https://www.cnblogs.com/IwishIcould/p/12638273.html

时间: 2024-11-07 14:52:47

重绘和重排的相关文章

浏览器的重绘与重排

在项目的交互或视觉评审中,前端同学常常会对一些交互效果质疑,提出这样做不好那样做不好.主要原因是这些效果通常会产生一系列的浏览器重绘(redraw)和重排(reflow),需要付出高昂的性能代价.那么,什么是浏览器的重绘和重排呢?二者何时发生以及如何权衡?如何在具体的开发过程中将重绘和重排引发的性能问题考虑进去?本文期待可以部分解释以上三个问题. 浏览器从下载文档到显示页面的过程是个复杂的过程,这里包含了重绘和重排.各家浏览器引擎的工作原理略有差别,但也有一定规则.简单讲,通常在文档初次加载时,

浏览器的重绘和重排(转)

浏览器从下载文档到显示页面的过程是个复杂的过程,这里包含了重绘和重排.各家浏览器引擎的工作原理略有差别,但也有一定规则.简单讲,通常在文档初次加载时,浏览器引擎会解析HTML文档来构建DOM树,之后根据DOM元素的几何属性构建一棵用于渲染的树.渲染树的每个节点都有大小和边距等属性,类似于盒子模型(由于隐藏元素不需要显示,渲染树中并不包含DOM树中隐藏的元素).当渲染树构建完成后,浏览器就可以将元素放置到正确的位置了,再根据渲染树节点的样式属性绘制出页面.由于浏览器的流布局,对渲染树的计算通常只需

浏览器渲染页面的过程,以及重绘与重排

浏览器的渲染过程 1,浏览器解析html源码,然后创建一个 DOM树.在DOM树中,每一个HTML标签都有一个对应的节点,并且每一个文本也都会有一个对应的文本节点.DOM树的根节点就是 documentElement,对应的是html标签. 2,浏览器解析CSS代码,计算出最终的样式数据.对CSS代码中非法的语法她会直接忽略掉.解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外链样式,内联样式,html中的style. 3,构建出DOM树,并且计算出样式数据后,下一步就是构

关于重绘and重排

在研究CSS3动画性能的时候,看到了重排两个字. 突然想到自己虽然听说过这么个东东,但一直也没深入研究之. 趁着当下正好有研究的劲头,所以一不做二不休,把这个point也给学习了. 同样是一番查找资料...不过这次我得跟作者和原文say sorry了... 因为...我在整理的过程中没注意mark下原文的url...so~~~ 主会原谅我的... 浏览器的工作流程 1.浏览器会解析三个东西: HTML/SVG/XHTML,事实上,Webkit 有三个 C++ 的类对应这三类文档.解析这三种文件会

浏览器的重绘和重排的影响

浏览器下载完页面中全部的组件之后,会解析生成两个内部数据结构: 1.  DOM树:表示页面结构 2. 表示DOM节点怎样显示 当DOM和渲染树构建完毕之后,浏览器就開始显示(绘制)页面元素.当DOM的变化影响了元素的几何属性(如改变边框或者高度)浏览器须要又一次计算元素的几何属性.相同其它元素的几何属性和位置也会受到影响.浏览器会使中受到影响的部分失效,并又一次构造渲染树.这个过程被称为所谓的"重排".完毕重排后.浏览器会又一次绘制受影响的部分到屏幕中,这个过程被称为"重绘&

重绘(repaints)与重排(reflows)

当页面布局和几何属性改变时就需要"重排" 避免在修改样式的过程中使用 offsetTop, scrollTop, clientTop, getComputedStyle() 这些属性, 它们都会刷新渲染队列 最小化重绘和重排, 尽量一次处理a. 使元素脱离文档流(隐藏元素),进行处理后,再显示元素b. 使用 documentFragment 或 innerHTMLc. 将原始元素拷贝到一个脱离文档的节点中, 修改副本, 完成后再替换原始元素

哪些情况下会导致重排或重绘的发生?请给出性能优化的建议。

1.简述重排的概念浏览器下载完页面中的所有组件(HTML.JavaScript.CSS.图片)之后会解析生成两个内部数据结构(DOM树和渲染树),DOM树表示页面结构,渲染树表示DOM节点如何显示.重排是DOM元素的几何属性变化,DOM树的结构变化,渲染树需要重新计算.2.简述重绘的概念重绘是一个元素外观的改变所触发的浏览器行为,例如改变visibility.outline.背景色等属性.浏览器会根据元素的新属性重新绘制,使元素呈现新的外观.由于浏览器的流布局,对渲染树的计算通常只需要遍历一次就

css的重排与重绘

一直在做pc页面的部分,由于网速快,看上去css的写法并没有什么影响所以对css的要求也没怎么注意过,最近在做一些手机端的东西,发现真的差好多,特别是再搭配上js效果时一些延迟更是让人接受不了.在这个快餐的时代,确实导致手机端更具有市场,搭乘地铁的时间变成人们浏览新闻,玩游戏,甚至是购物的时间,此时用户应用的设备多数会是手机,而手机与电脑比起来最大的差距就是网速,这对开发者的要求也就提高了,如何能够加快加载减少响应时间就变成了开发者永恒不变的话题.目前虽然有很多的前辈们已经针对这个现状提出了很多

浏览器渲染页面的过程,以及重排和重绘(转)

前言 写得比我的文字好,有逻辑! 浏览器的渲染过程 1,浏览器解析html源码,然后创建一个 DOM树.在DOM树中,每一个HTML标签都有一个对应的节点,并且每一个文本也都会有一个对应的文本节点.DOM树的根节点就是 documentElement,对应的是html标签. 2,浏览器解析CSS代码,计算出最终的样式数据.对CSS代码中非法的语法她会直接忽略掉.解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外链样式,内联样式,html中的style. 3,构建出DOM树,