# 关于重排和重绘
div.style.top = '10px'
div.style.bottom = '10px'
// console.log(div.offsetWidth)
div.style.right = '10px'
div.style.left = '10px'
上面代码中,除了注释部分有4条语句,都改变了dom节点的样式,浏览器会有个优化,就是维护一个渲染队列,一次性进行重排和重绘。但是有一些操作会强制刷新这个渲染队列,触发重排,例如上面注释那行代码,访问了offsetWidth属性,一般访问这些位置相关的属性时,就会强制刷新这个渲染队列,以便确定准确的位置。也存在一些老版本浏览器,可能没有维护队列,进行优化。
# 优化方法
- 样式集中改变
- 缓存布局属性
- 将DOM离线,可能造成闪烁的问题
- 脱离文档流
- 启用GPU加速
- Canvas2D
- CSS transition
- CSS transform
- WebGL
- video
← 项目部署