如今手机的占比愈来愈高,各类酷炫页面层出不穷,这些特效都离不开css动画。说到css动画,主流的状况也就无非这两大类:位移和形变。而咱们在写一个动画特效的过程当中,如何去提高它的性能呢?固然首先咱们须要去了解一下基本的概念,好比浏览器渲染的工做原理等,这些我也在读了几位大牛写的相关文章后才有了必定的了解,这边我也不细说了,有兴趣的同窗能够去了解一下。本次的目的简单粗暴地讲,其实就是咱们应该使用什么css属性去进行动画的绘制时,可以有效的提升浏览器在渲染和绘制过程当中的性能。css
分别使用了left和transform在2秒内向右平移了500px的位移。代码以下:web
<style> .box-ps,.box-tf{position:absolute;top:0;left:0;width:100px;height:100px;background-color:red;} .box-ps{-webkit-animation:box-ps 2s linear;} .box-tf{-webkit-animation:box-tf 2s linear;} @-webkit-keyframes box-ps{ 0%{ left:0; }100%{ left:500px; } } @-webkit-keyframes box-tf{ 0%{ -webkit-transform:translate(0,0); }100%{ -webkit-transform:translate(500px,0); } } </style> <body> <div class="box-ps"></div> <div class="box-tf"></div> </body>
而后在chrome下获得了以下的结果,第一张为使用left的截图,第二张为使用transform的截图:chrome
transform的截图浏览器
显而易见,咱们在帧模式这里能够看到left比transform帧数要低,并且在渲染和绘制这边的耗时,left要远远的大于transform。看到这里,相信你们内心已经有结论了。
咱们再利用chrome的show paint rectangles来观察一下二者在动画过程当中,渲染和绘制的区域有何差别,第一张为使用left的截图,第二张为使用transform的截图:布局
transform的截图性能
咱们能够看到,使用left写的整个动画过程当中,浏览器一直在进行绘制处理。而相对而言,使用transform时,仅仅是在动画开始和结束是进行了绘制。所以,对于动画的性能上,transform要更为出色。至于缘由,这里就要引入一个触发从新布局的概念:动画
咱们在改变一些属性时,若是是跟layout相关的属性,则会触发从新布局,致使渲染和绘制所须要的时间将会更长。所以,咱们在写动画的时候因该规避这些属性:width, height, margin, padding, border, display, top, right, bottom ,left, position, float, overflow等。
不会出发从新布局的属性有:transform(其中的translate, rotate, scale), color, background等。spa
因此,咱们平时在写css动画时,应该优先使用不触发从新布局的属性,这样可使咱们所展现动画效果的更加流畅。设计