页面的重绘与回流,以及如何优化

本文详细介绍了浏览器的页面呈现流程,包括DOM树和Render Tree的构建。重点讨论了页面重绘与回流的概念,强调回流的高昂代价,并列举了触发回流的各种情况。此外,文章提供了多种优化策略,如改变className而非单独样式属性、利用离线处理和浏览器队列优化,以减少回流和重绘,提升页面性能。
摘要由CSDN通过智能技术生成

页面的重绘与回流,以及如何优化

浏览器对页面的呈现流程

页面呈现流程

浏览器把取到的HTML代码解析成1个DOM树

HTML中的每个tag都是DOM中的1个节点

根节点是document对象

DOM树里包含了所有HTML标签

包括display:none;隐藏(因为DOM tree无法识别样式),还有用JS动态添加的元素等

浏览器把所有样式解析成样式结构体,解析过程中会去掉浏览器不能识别的样式(例如:IE会去掉-moz开头的样式)

DOM tree和样式结构体组合构建render tree

render tree类似于DOM tree

render tree能识别样式,render tree中的每个节点都有自己的style

render tree不包含隐藏的节点(例如:display:none;的节点和head节点)

页面加载时,不会呈现且不会影响呈现的节点不会包含到render tree中

visibility:hidden;会影响布局(layout),会占有空间

浏览器根据构建好的render tree来绘制页面

回流与重绘

1、概述

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

每个页面至少回流一次,即页面首次加载

回流时,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树

回流完成后,浏览器会重新绘制受影响的部分,是重绘过程

当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观、风格,而不影响布局(例如:background-color),则称为重绘(repaints)

回流必将引起重绘,重绘不一定引起回流

回流比重绘的代价更高

2、回流何时发生

当页面布局和几何属性改变时就需要回流

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

元素改变位置和计算offsetWidth和offsetHeight属性

元素尺寸改变–边距、填充、边框和宽高

内容改变(例如:文本改变、图片大小改变而引起的计算值宽度和高度改变,input框中输入文字)

页面渲染初始化

浏览器窗口尺寸改变–resize事件发生时

增加或移出样式表

操作class属性

改变字体

激活伪类(例如:hover)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值