- 减少重绘和重排
会引起重排的操作:- 添加或者删除可见的DOM元素
- 元素位置改变
- 元素尺寸改变
- 元素内容改变(例如:一个文本被另一个不同尺寸的图片替代)
- 页面渲染初始化(这个无法避免)
浏览器窗口尺寸改变如今浏览器大部分已经针对重排做了优化,通过队列优化修改并批量执行优化重排过程,一次性完成,但某些DOM操作会导致浏览器强制刷新队伍并要求计划任务立即执行,如获取元素的布局信息操作。
在开发中应当尽量减少重排次数和缩小重排的影响范围。
- 将多次改变样式属性的操作合并成一次操作,或者先集合操作获取属性,再集中操作修改属性
- 将需要多次重排的元素,
position
属性设为absolute
或fixed
,这样此元素就脱离了文档流,它的变化不会影响到其他元素。例如有动画效果的元素就最好设置为绝对定位。 - 在内存中多次操作节点,完成后再添加到文档中去。如先生成HTML字符串,再整体赋值。
- 由于
display
属性为none
的元素不在渲染树中,对隐藏的元素操作不会引发其他元素的重排。如果要对一个元素进行复杂的操作时,可以先隐藏它,操作完成后再显示。 - 在需要经常获取那些引起浏览器重排的属性值时,要缓存到变量。
fragment
元素的应用。