什么是重排?如何减少重排

本文详细介绍了浏览器如何解析HTML、构建DOM树和CSSOM,合并为渲染树,以及重排和重绘的触发条件、过程和优化策略。重点讲解了如何通过避免几何属性变化和使用缓存技术减少回流和重绘的影响。
摘要由CSDN通过智能技术生成

介绍:

(1).浏览器将获取的HTML文档解析成DOM树。

(2).处理CSS标记,构成层叠样式表模型CSSOM(CSS Object Model)。

(3).将DOM和CSSOM合并为渲染树(rendering tree),代表一系列将被渲染的对象。

(4).渲染树的每个元素包含的内容都是计算过的,它被称之为布局layout。浏览器使用一种流式处理的方法,只需要一次绘制操作就可以布局所有的元素。

(5).将渲染树的各个节点绘制到屏幕上,这一步被称为绘制painting。

一、重排 | 回流(reflow)的触发条件


当浏览器发现布局发生了变化,这个时候就需要倒回去重新渲染,这个回退的过程叫reflow。

简单来说就是渲染树中的节点大小、位置等信息发生了改变,需要重新计算,重新渲染。

会引起重排的条件:一个 DOM 元素的几何属性变化,常见的几何属性有width、height、padding、margin、left、top、border,获取元素的某些属性,比如offset族、scroll族和client族属性。reflow几乎是无法避免的,因为只要用户进行交互操作,就势必会发生页面的一部分的重新渲染,且通常我们也无法预估浏览器到底会reflow哪一部分的代码,因为他们会相互影响。

二、重排过程

reflow会从html这个root frame开始递归往下,依次计算所有的结点几何尺寸和位置,以确认是渲染树的一部分发生变化还是整个渲染树,就相当于是将解析和合成的过程重新走了一遍,开销很大。

三、避免重排、重绘

1.使用DocumentFragment将需要多次修改的DOM元素缓存,最后一次性append到真实DOM中渲染

2.可以将需要多次修改的DOM元素设置display:none,操作完再显示。(因为隐藏元素不在render树内,因此修改隐藏元素不会触发回流重绘)

3.避免多次读取某些属性

4.通过绝对位移将复杂的节点元素脱离文档流,形成新的Render Layer,降低回流成本

四、重绘(repaint)的触发条件

repaint是当我们改变某个元素的背景色、文字颜色、边框颜色等等不影响它周围或内部布局的属性时,屏幕的一部分要重画,但是元素的几何尺寸和位置没有发生改变。

1.reflow回流必定引起repaint重绘,重绘可以单独触发。
2.背景色、颜色、字体改变(注意:字体大小发生变化时,会触发回流)
———————————————————————————————————————————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值