reflow(回流)和repaint(重绘)

628 阅读1分钟

影响页面渲染速度主要有:reflow(回流)和repanit(重绘) reflow(回流) 由于浏览器要花费时间渲染,尤其是当它发现某个部分了点变化影响力布局,需要重新渲染,此现象过程称为reflow即回流。reflow是无法避免的。 repaint(重绘) 只改变某个元素的属性和样式不影响布局样式,只会引起repaint(重绘)。 如何避免回流 回流是导致DOM脚本执行低效的关键因素之一。页面上任何一个结点触发reflow,都会导致它的子结点及祖先结点重新渲染 那些情况会导致reflow发生:

        1.改变窗口大小
        2.改变字体大小
        3.添加/删除样式表
        4.内容改变,如用户在输入框中敲字。
        5.激活伪类,如:hover(IE里是一个兄弟结点的伪类被激活)
        6.操作class属性
        7.脚本操作DOM
        8.计算offset和offectHeight
        9.设置style属性

reflow是不可避免的,只能将reflow对性能的影响减到最小

          1.尽可能限制reflow的影响范围。需要改变元素的样式,不要通过父级元素影响子元素,最好直接加
          在子元素上
          2.通过设置style属性改变结点样式的话,每设置一次都会导致reflow。所以最好设置class
          3.实现元素动画方式
          4.权衡速度平滑
          5.不要使用tables布局,尽可能使用flex布局
          6.减少不必要的dom层级
          7.减少不必要的复杂的CSS选择器
          8.某些属性会重新计算一遍