javaScript性能优化—repaint和reflow

作为前端开发人员,一定要考虑性能优化的问题。今天就记录一下,我之前关于jvaScript性能优化—repaint和reflow的总结笔记。
首先对repaint和reflow做一下简单的解释。
repaint(重绘):
repaint发生更改时,元素外观被改变,且在没有改变布局的情况下发生(这一点我的项目中就遇到过,是焦点显示的时候改变对象的border,就发生了重绘,占用了很多的cpu,我们的项目中是同时给焦点对象添加了css3的动画,这样对比正常情况多耗费20%多的cpu。)。如:outline、visibility、background和color等不会影响dom结构渲染。
reflow(渲染/回流):
与repaint的区别是它会影响dom的结构渲染,同时会触发repaint,它会改变它本身与所有父辈元素,由此可以看出页面元素越多,性能下降的就会越明显。
reflow(渲染/回流)是导致dom脚本执行低效的关键因素之一。
避免方式:1.新创建的多个dom节点,最好一次性加入document。
2.尽可能减少修改元素的style值。
3.尽量通过修改className来修改样式。
4.尽量不要用table布局。
5.修改的样式,如果要修改多个值,尽量写在一起。
6.设置元素的position值为absolute或fixed。(元素脱离标准流,也从dom树结构中脱离出来,在需要reflow时,
只需要reflow自身与下级元素即可)
7.避免使用expression,它每次调用都会重新计算(包括加载页面)即便鼠标移动,expression都会计算千次以上。
expression:(例子)
html中:


css中:
.container{width:expression((documentElement.clientWidth < 500) ? “500px” : “200px”)}
即css属性后可为一段js的代码。
8.避免不必要的复杂的css选择器,尤其是后代选择器,因为为了匹配选择器将耗费更多的cpu。