从 main frame 的绘制流程来说重绘和回流
回流必将引起重绘,但是重绘不一定会引起回流
-
浏览器使用流式布局
-
生成 render tree => 知道所有的节点样式了,然后计算节点在页面上的大小和位置 => 绘制 ui
-
回流是什么
render tree 中部份或全部元素的尺寸、结构、或某些属性发生改变时,浏览器重新渲染纷纷或全部文档的过程称为回流
导致回流的操作
- 页面首次渲染
- 浏览器窗口大小发生改变
- 元素尺寸位置发生改变
- 元素内容发生改变
- 增删可见 dom 元素
- 激活伪类
- 使用某些属性或方法 => 主要是和位置尺寸有关的
-
重绘事什么
页面中元素样式的改变并不影响它在文档流中的位置时,浏览器会重新绘制,这就叫重绘
-
回流的代价更改
- 避免 table 布局
- 在 DOM 数的最末端改变 class
- 避免多层内联样式
- 动画效果应用到 absolute 或 fixed 上
- 避免 css 表达式
- 避免频繁的样式操作
- 避免平凡的 dom 操作
- 给元素设置 display: none
- 复杂动画使用绝对定位