欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初试Chrome性能测试

程序员文章站 2022-06-07 08:28:28
...

1、之前做空间图集里面要实现预览图的左右滑动,也就是改变图片的位置。一般可以使用三种方法:改变元素的left属性;改变元素的margin-left属性;使用transform属性。

2、下面分别用三种方法来实现元素位置的移动:3s内元素向下移动500px。并使用Chrome开发者工具进行性能测试。

代码如下:

<head>
    <meta charset="utf-8">
    <title>TestMove</title>
    <style>
        #box{
            width:100px;
            height:100px;
            background-color:red;
            position:relative;
            animation:move1 3s;
            -webkit-animation:move1 3s;
        }
        @keyframes move1
        {
            from {top:0px;}
            to {top:500px;}
        }

        @-webkit-keyframes move1{
            from {top:0px;}
            to {top:500px;}
        }
        @keyframes move2{
            from{margin-top:0px;}
            to{margin-top:500px;}
        }
        @-webkit-keyframes move2{
            from{margin-top:0px;}
            to{margin-top:500px;}
        }

        @keyframes move3{
            from{transform:translateY(0px);}
            to{transform:translateY(500px);}
        }
        @-webkit-keyframes move3{
            from{transform:translateY(0px);}
            to{transform:translateY(500px);}
        }
    </style>
    </head>
    <body>
        <div id="box"></div>
    </body>

3、三种方式的性能比较:

(1)使用top属性:
初试Chrome性能测试
(2)使用margin-top属性:
初试Chrome性能测试
(3)使用transform属性:
初试Chrome性能测试
可以看到,使用transform的效果最好,margin-top次之,top最差。使用top和margin-top执行过程中,大部分时间花在了网页的渲染(rendering)(大于80ms)与绘制(painting)(大于40ms)过程中,而使用transform在渲染与绘制上所用时间均在5ms左右。

4、分析:

它们之间的差距源自浏览器渲染的原理:
浏览器生成动画的时候一般有两种方式:
第一种方式是通过JavaScript或者css来改变元素的属性;
第二种方式是通过JavaScript在canvas上绘制一个动态图形;

第一种方式的动画生成步骤如下:
① JavaScript或者css来改变元素的属性;
② 计算元素的最终属性;
③ Layout布局,根据元素的最终属性完成网页的布局(一个元素的变化会引起整个网页内容的联动变化,比如margin、padding等,这个联动过程叫做reflow重排);
④ 绘制:元素存在层级关系,把每个层级的元素分层分开完成渲染(颜色、图片、边框、阴影等);
⑤ 合并渲染,不同层级元素合并一起完成最终值的渲染。

使用margin-top和top动画执行过程中,大部分时间花在了网页的渲染(rendering)与绘制(painting)过程中,因为它们都要执行上述过程的1-5步骤,而使用transform属性则避免了这一过程,因此用时更少,效率更高。

相关标签: Chrome性能分析