性能优化——回流重绘

130 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第9天,点击查看活动详情

前言

前端开发的页面是与用户直接交互,页面越流畅用户越方便,从代码到最终页面的呈现有很多性能优化的地方,这些都是我们需要了解的,今天来看一下回流与重绘。

回流

回流:当页面元素尺寸、属性、结构等发生变化的时候,浏览器会重新渲染变化的元素。根据定义我们可以想到一些常见的回流操作:

  • 浏览器窗口发生变化。
  • 首次加载页面。
  • 操作dom进行增删。
  • 元素的内容、字体大小、位置等发生变化。 因为浏览器渲染页面是基于流式布局的,所以当触发回流时,不会只单单对改变的dom更新,周边的don元素也会受到影响重新排列,这个影响分为两种:
  • 全局,导致整个渲染树重新渲染布局。
  • 布局,渲染数某个部分进行重新渲染。

重绘

重绘:当页面元素不改变位置的样式发生变化时,浏览器会重新绘制元素。重绘操作就是修改元素的某些的样式:

  • 颜色背景:color、background等。
  • 轮廓: text-decoration、outline-color等。
  • 边框、阴影:border-radius、box-shadow等。 从上面描述可以得出:
  • 重绘一定回流,回流不一重绘
  • 这两者如果触发频繁,意味着浏览器渲染频繁。减少两者的触发,就会提升性能。

优化方法

减少回流与重绘是性能优化的一种形式,具体的举措有:

  • 避免频繁操作dom,可以利用documentFragment,它不是包含在真实dom里面,相关变化不会触发dom的更新渲染。
  • 操作dom时,尽量选择最低层级节点进行改变。
  • 使用CSS表达式,class类名等,减少style的使用。
  • 对需要改变的dom使用定位absolute、fixed属性,让其脱离文档流。
  • 利用display属性,先设置为none,操作结束后再改变属性值将dom显示出来。

总结

以上就是针对回流与重绘的优化方法,性能优化无止境,日常开发中我们需要尽量避免频繁触发回流与重绘。