新年之后的第一篇 blog,一个月没更真是有的小想念,准备面试的时候看到的关于 reflow 和 repaint 的知识点,总结了一下 :)
当你改变一个元素的几何大小和定位的时候,页面的整个 “元素流” 也会跟着变化,这就是我们说的 reflow
reflow 在性能上的代价是大的,是因为当你改变一个元素的大小和定位的时候,这个元素的子元素、祖先元素和所有底下的元素都要去重新计算大小和定位。在大多数情况下,reflow 实际上是会导致页面的重新渲染
而在手机上更是明显,相比于 PC 低效的处理器和较小的屏幕,页面常常会整个页面重新布局
很不幸的是,很多东西都会导致 reflow,下面是常见的一部分
:hover
如果不能避免 reflow,我们应该尽可能地减少次数和时间,下面有几个方法
fragment
来包裹节点,再进行一次插入操作当你改变一个元素的样子却不改变他的大小和形状的时候,这不会导致 reflow 因为元素的几何形状没有发生改变
修改元素的 CSS 样式例如 background-color
,opacity
,visibility
和 outline
等等
repaint 对于浏览器性能的代价也很大,因为浏览器每次 repaint 都必须检查 DOM 中所有元素的可见性,但相比于 reflow,repaint 代价较低