当元素的样式发生变化时,浏览器需要触发更新并重绘元素。在这个过程中,有两种操作,重绘和重排。@1:重绘(repaint):当元素样式的改变不影响布局时,浏览器会使用重绘来更新元素。此时由于只需要重绘UI层面的像素点,所以损失较小。@2:回流(reflow):当元素的尺寸、结构或某些属性被触发时,浏览器会重新渲染页面,称为回流。这时候浏览器需要重新计算,计算完需要重新启动页面布局,所以属于重操作,会触发回流操作:·页面的第一次渲染·大小浏览器窗口的变化·元素大小、位置和内容发生变化元素字体大小变化增加或删除可见的dom元素激活css伪类(:hover)查询某些属性或调用某些方法:clientWidth、clientHeight、clientTop、clientLeftoffsetWidth,offsetHeight,offsetTop,offsetLeftscrollWidth,scrollHeight,scrollTop,scrollLeftgetComputedStyle()getBoundingClientRect()scrollTo()回流必须触发重绘,但重绘不一定触发回流;重绘成本较低,但回流成本较高。css:避免使用表格布局;将动画效果应用于position属性为绝对或固定的元素。js:·避免频繁操作样式,汇总后可依次修改;·尽量使用类进行样式修改;·减少dom增删次数,一次性使用strings或documentFragment插入;display:none稍后修改;避免触发上述会多次触发回流的方法,尽量使用变量存储。
