重绘与回流

2018-11-26  本文已影响0人  novaDev

定义

回流产生原因

  1. 页面渲染初始化
  2. DOM结构改变,比如删除了某个节点
  3. render树变化,比如减少了padding
  4. 窗口resize
  5. 最复杂的一种:获取某些属性,引发回流

很多浏览器会对回流做优化,会等到数量足够时做一次批处理回流,但是除了render树的直接变化,当获取一些属性时,浏览器为了获得正确的值也会触发回流,这样使得浏览器优化无效

  1. offset(Top/Left/Width/Height)
  2. scroll(Top/Left/Width/Height)
  3. cilent(Top/Left/Width/Height)
  4. width,height
  5. 调用了getComputedStyle()或者IE的currentStyle

避免回流

  1. 减少逐项更改样式,最好一次性更改style,或者将样式定义为class并一次性更新
  2. 避免循环操作dom,创建一个documentFragment或div,在它上面应用所有DOM操作,最后再把它添加到window.document
  3. 避免多次读取offset等属性。无法避免则将它们缓存到变量
  4. 将复杂的元素绝对定位或固定定位,使得它脱离文档流,否则回流代价会很高
上一篇 下一篇

猜你喜欢

热点阅读