other JavaScript02
重绘和回流
重绘(repaint)和回流(reflow)
全局回流(reflow), 部分重画(重绘 repaint)
- 重绘(repaint): 屏幕的一部分要重画,更新当前节点外观不影响布局,比如
color
- 全局回流(reflow): 布局或者几何属性尺寸改变(HTML使用的是 flow based layout,也就是流式布局,所以如果某元素的几何尺寸发生了改变,需要重新布局,也叫reflow)
下面这些动作很大可能会是导致性能问题:
- 改变
window
窗口大小 - 改变字体大小
- 添加,删除,修改DOM节点
- 定位或者浮动引起DOM的位置变化
display:none
会触发回流(reflow)visibility:hidden
只会引起重绘(repaint)
减少重绘(repaint)和回流(reflow)
DOM
样式集中修改- 不要把
DOM
节点的属性值放在一个循环里当成循环里的变量 - 尽可能修改层级比较低的
DOM
- 为动画的
HTML
元素使用fixed
或者absolute
的position
(原因:动画速度越快,回流次数越多,修改fixed
和absolute
不会回流) - 减少使用
table
布局,因为可能很小的一个小改动会造成整个table的重新布局