浏览器下载完页面中的所有组件(HTML,CSS,JavaScript,图片)之后会解析生成两个内部数据结构(DOM树和渲染树)
DOM树表示页面结构,渲染树表示DOM节点如何显示,
重排是DOM元素的几何变化,DOM树结构变化,渲染树需要重新计算
**重绘是当页面中的元素样式的改变并不影响它在文档流中的位置,比如改变背景,颜色,字体等等,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观,**由于浏览器的流布局,对渲染树的计算通常只需要遍历一次就可以完成,但是table及其内部元素除外,它可能需要多次计算才能确定好其在渲染树中的节点属性,比同元素要多花两倍时间,因此尽量避免使用table布局
- 页面渲染初始化时候 ,
- 浏览器尺寸变化时,
- 元素尺寸发生改变
- 元素位置发生改变
- 元素内容发生改变
- 添加或者删除可见的DOM元素
- color
- border-style
- visibility
- background
- text-decoration
- background-image
- background-position
- background-repeat
- outline-color
- outline
- outline-style
- border-radius
- outline-width
- box-shadow
- background-size
- 减少 DOM 访问,讲多次改变样式属性操作合并成一次操作
- 如果需要批量操作 DOM,可以先让元素脱离文档流,操作完在带入文档流,这样只会触发一次重排(fragment元素的应用)
- 由于display:none的元素不再渲染树中,对隐藏的元素操作不会引起其他元素的重排
- 在内存中多次操作节点完成之后添加到文档中
- 尽量不要在布局信息改变时做查询操作(会导致渲染队列强制刷新)
6.需要多次重排的元素,使用 position:absolute 或者 fixed,使其脱离文档流