如何最小化重绘(repaint)和回流(reflow)

310 阅读1分钟

什么是重绘Repaint和重排(回流 reflow) 重绘:当元素的一部分属性发生改变,如外观、背景、颜色等不会引起局面变化,只需要浏览器根据元素的新属性重新绘制,使元素出现新的外观叫做重绘。
重排(回流):当renfer树中的一部分或者全部因为大小边距等问题发生改变而需要DOM树重新计算的过程
重绘不一定需要重排(比如颜色的改变),重排必然导致重绘(比如改变页面位置)
方法:
1.需要对元素进行复杂的操作时,可以先隐藏(display:"none"),操作完成后再显示
2.需要创建多个DOM节点时,使用DocumentFragment创建完最后一次性的加入document缓存Layout属性,如:var left=elem.offsetLeft;这样,多次使用left只产生一次回流
3.尽量避免使用table布局(table元素一旦触发回流就会导致table里面所有的其他元素回流)
4.避免使用css表达式(expression),因为每次调用都会重新计算值(包括加载页面)
5.尽量使用css属性简写,如:用border代替border-width,border-style,border-color
6.批量修改元素样式:elem.className和elem.style.cssText代替ele.style.xxx