「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
在复习回流与重绘之前,我们熟悉一下浏览器渲染页面的过程:
-
解析HTML,构建 DOM 树
-
解析 CSS ,生成 CSS 规则树
-
合并 DOM 树和 CSS 规则,生成 render 树
-
布局 render 树( Layout / reflow ),负责各元素尺寸、位置的计算
-
绘制 render 树( paint ),绘制页面像素信息
-
浏览器会将各层的信息发送给 GPU,GPU 会将各层合成( composite ),显示在屏幕上
回流:
当render树中的一些元素因为元素的大小,布局等改变而需要重新构建,这就称为回流。
在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘
引起回流的原因:
- 浏览器窗口尺寸大小改变
- 元素位置和尺寸大小发生改变的时候
- 新增和删除可见元素
- 元素内容发生改变(比如文字、图片大小改变等等)
- 元素字体大小变化。
- 页面第一次渲染 在页面发生首次渲染的时候,所有组件都要进行首次布局,这是开销最大的一次回流。
重绘:
当render树中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局
引起重绘的原因:
1.背景色的改变 2.透明度的改变
一些非元素大小或布局更改导致的变化会引起重绘 注意:
-
每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建render树
-
回流必将引起重绘,而重绘不一定会引起回流。回流会导致渲染树需要重新计算,开销比重绘大,所以我们要尽量避免回流的产生