影响页面渲染速度主要有: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.某些属性会重新计算一遍