一、DOM的回流和重绘
**DOM的回流**:当页面中元素的位置,大小或结构、定位发生改变,
会引发浏览器对当前页面的结构进行重新的计算;非常耗性能的;
**DOM的重绘**: 当元素的背景、透明度、颜色发生变化,
那么浏览器会对元素进行重新描绘;这个过程就是浏览器的重绘;
二、优化(减少回流,重排)
1.浏览器本身放入优化策略:
浏览器会维护一个队列,把所有的引起回流,重绘的操作放入这个队列,等队列中的操作到了一定数量或是到了一定时间,浏览器就会flush队列,进行一个批处理。
2.我们要做的就是减少对render tree 的操作,减少一些style信息的请求。
- 将多次改变样式的操做合并成一次。
- 将需要多次重排的元素,position属性设为absolute或者fixed,这样次元素就脱离文档流,变化不会影响其他元素。
- 在内存中多次操作节点,完成后再添加到文档中去。比如,异步获取表格数据,再添加到页面中,我们可以先获取数据,在内存中构建整个表格的html结构,再一次性的添加到文档中去。而不是循环添加。
- 由于display属性为none的元素不在渲染树中,对隐藏元素的操作不会引发其它元素的重排。如果要对一个元素进行复杂操作,可以先影藏,操作完成后再显示。触发两次重排。
- 取浏览器重排的属性值,缓存到变量。