CSS Animation 使 Mobile 网页崩溃!? 效能优化篇(3) - 优化Animation动画~

解决问题搂
终於最後一步要来了!问题已找到~我们动手开始优化吧

1.将连续图拿掉,改用css制作动画
原本有一个流星动画是一张750 × 148544 连续图, 利用background-position-y变更制成动画

<style>
    .effect {
      width: 750px;
      height: 422px;
      background-image: url(图片位置);
    }
    .effect.is-play {
      animation: effect-keyframes 30s  step-end infinite;
    }

    @keyframes effect-keyframes {
      0%
          background-position-y: 0px;
      3.5%
          background-position-y: 422px;
      .......
    }
</style>

最後修改成纯使用CSS制作

<style>
.effect {
  width: 750px;
  height: 422px;
}
.effect .star {
  /* 流星样式 */
}
.effect .star:after {
  /* 流星尾巴样式 */
}
.effect.is-play .star {
  animation: effect-keyframes 0.51s  ease-out;
}
.effect.is-play .star:after {
  animation: effect-keyframes-2 0.51s  ease-out;
}
@keyframes effect-keyframes {
  0%
      transform: scale(1) rotate(0) translate3d(-26px, -162px, 0);
      opacity: 0;
  100%
      transform: scale(1) rotate(0) translate3d(161px, 90px, 0);
      opacity: 1;
}
@keyframes effect-keyframes-2 {
  0%
      transform: scale(0) rotate(-130deg) translate3d(0, 0, 0);
      opacity: 0.2;
  100%
      transform: scale(1) rotate(-130deg) translate3d(0, 0, 0);
      opacity: 1;
}
</style>

对!~最後拿掉了750 × 148544 连续图
用纯css+html就做完这个效果了
面对有机会用css解决的动画, 真是不能偷懒啊~

2.无法拔掉的连续图-缩小
面对有些动画,实在无法用css处理,例如蜡烛火焰的动画, 用css实在很难满足需求
这边处理的方式为"减少连续图的数量"
我们将连续图从 299 × 20691 减少到 148 × 2312
大大的减少了效能负担

3.无法拔掉的连续图-优化动画指令
面对还是需要跑连续图的动画,进行改写
待机动画原本的写法

<style>
    .effect {
      width: 299px;
      height: 422px;
      background-image: url(图片位置);
    }
    .effect.is-play {
      animation: effect-keyframes 0.8s step-end alternate infinite;
    }

    @keyframes effect-keyframes {
      0%
          background-position-y: 0px;
      5%
          background-position-y: 422px;
      .......
    }
</style>

经过优化後

<style>
    .effect-wapper {
      width: 750px;
      height: 422px;
      overflow: hidden;
    }
    .effect {
      width: 750px;
      height: 8440px;
      background-image: url(图片位置);
    }
    .effect.is-play {
      animation: effect-keyframes 0.8s step-end alternate infinite;
    }

    @keyframes effect-keyframes {
      0%
          transform: translate3d(0px, 0px, 0px);
      5%
          transform: translate3d(0px, -422px, 0px);
      .......
    }
</style>

是的!背景background-position-y, 改成transform变形, 就是这点写法上的改变,就让待机时的效能产生极大改变!(详细原因请看上篇)
原本待机时的cpu使用度(左边电脑MacBook Pro, 右边小米s4)
原本效能
background-position-y 变为 transform 後(左边电脑MacBook Pro, 右边小米s4)
https://ithelp.ithome.com.tw/upload/images/20210716/20138547xTsqgGcpTq.png
电脑版回到正常的1%以下, 手机也从18%回到正常的1%左右
太爽了

最终结果(动画播放时):

优化前CPU Lag的不要不要的
优化前
整体优化後
电脑CPU使用落在10%内, 手机版CPU使用约在30%~60%之间跳跃,运作顺畅~搞定!
https://ithelp.ithome.com.tw/upload/images/20210716/201385476ZCOij9R7z.png

结语:

对於动画的建议是,所有变型与位移都使用transform, 显示与隐藏使用opacity, 大部分动画靠这两个属性可以全部搞定,真的搞不定的.....就只能祈祷浏览网页的人手机给力搂~


<<:  CSS Animation 使 Mobile 网页崩溃!? 效能优化篇(2) - 查看网页效能并发现问题~

>>:  从零开始用github架设静态网站入门(4) - 其他小功能制作

[读书笔记] Threading in C# - PART 2: BASIC SYNCHRONIZATION

本篇同步发文於个人Blog: [读书笔记] Threading in C# - PART 2: BA...

Day41 ( 电子元件 ) 电流急急棒

电流急急棒 教学原文参考:电流急急棒 这篇文章会介绍如何使用「数位信号读取」、「逻辑判断」、「演奏音...

Day26 Android - datepicker+timepicker(日期+时间选择器)

在某些应用来说,有时会看的到这些的工具,像是预约、或是创立帐号时要输入的生日等,都算是好用的一个小功...

awk - 简介 Linux 制表好工具

awk Linux文字处理工具中, 有另一个杀器awk 但awk是个程序语言, 所以它很灵活且功能强...

Day 22:贪婪演算法(2)

上一回写到大部分贪婪演算法并非永远正确,那哪些问题适合用它来解呢? 最佳子结构 贪婪演算法既是在过程...