1、重绘
重绘是一个元素外观的改变所触发的浏览器行为(例如改变visibility,outline,background等属性),浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。
2、重排
重排时更明显的一种改变,可以理解为渲染树需要重新计算。常见的触发重排的操作:
DOM元素的几何属性变化
DOM树的结构变化(例如节点的增减、移动)
获取某些属性(例如offsetTop,offsetLeft,offsetHeight,offsetWidth,clientWidth,clientHeight等)
改变元素的一些样式(例如调整浏览器窗口大小)
3、两者的区别
重绘不会带来重新布局,并不一定伴随着重排。
在实践中,应该尽量减少重排次数和缩小重排的影响范围。有以下几种方法:
将多次改变样式属性的操作合并成一次操作
将需要多次重排的元素,position属性设为absolute或fixed,使其脱离文档流,这样它的变化就不会影响到其他元素
在内存中多次操作节点,完成后再添加到文档中去
如果要对一个元素进行复杂的操作,可以将其display属性设置为none使其隐藏,待操作完成后再显示
在需要经常获取那些引起浏览器重排的属性值时,要缓存到变量