js 动画性能分析 transfrom

1、动画实现代码

(1)使用定位实现:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>动画性能分析-left</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }

            #box {
                width: 200px;
                height: 200px;
                background-color: aqua;
                position: relative;
                left: 0;
            }
        </style>
    </head>
    <body>
        <div id="box">
        </div>
        <script type="text/javascript">
            let dd = setInterval(function() {
                var div = document.getElementById("box");
                var left = div.offsetLeft + 5;
                div.style.left = left + "px";
                if (left > 500) {
                    clearTimeout(dd)
                }
            }, 50);
        </script>

    </body>
</html>

(2)使用transform实现

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>动画性能分析-transform</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }

            #box {
                width: 200px;
                height: 200px;
                background-color: aqua;
            }
        </style>
    </head>
    <body>
        <div id="box">
        </div>
        <script type="text/javascript">
            let i = 1
            let dd = setInterval(function() {
                var div = document.getElementById("box");
                div.style.transform = `translateX(${5*i}px)`
                i++;
                if (i > 100) {
                    clearTimeout(dd)
                }

            }, 50);
        </script>

    </body>
</html>

 

2、性能分析

(1)打开chrome 控制台的Performance

(2)打开rendering (查看帧率)

对以上2个代码段执行录制

 

 

性能结果:

(1)使用定位布局来实现动画的结果为:

 

(2)使用transform实现动画的效果:

 

说明:

蓝色(Loading):网络通信和HTML解析
黄色(Scripting):JavaScript执行
紫色(Rendering):样式计算和布局,即重排
绿色(Painting):重绘
灰色(other):其它事件花费的时间
白色(Idle):空闲时间

 

结论:使用ttransform 实现动画 在重排和重绘的时间上都小于 定位实现动画。transform效果更好

 

3、帧率

关于帧率,可以设置更小的时间间隔,如下代码(每5ms执行一次):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>动画性能分析-left</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }

            #box {
                width: 200px;
                height: 200px;
                background-color: aqua;
                position: relative;
                left: 0;
            }
        </style>
    </head>
    <body>
        <div id="box">
        </div>
        <script type="text/javascript">
            let dd = setInterval(function() {
                var div = document.getElementById("box");
                var left = div.offsetLeft + 5;
                div.style.left = left + "px";
                if (left > 500) {
                    clearTimeout(dd)
                }
            }, 5);
        </script>

    </body>
</html>

效果:

看起来不卡顿

帧率在60fps时流畅,小于60fps时卡顿(越小越卡顿)。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值