Web开发动画与性能优化

server/2024/10/20 3:10:50/

帧率说明

帧率(Frames Per Second, FPS)指的是每秒钟渲染的帧数。通常情况下,60FPS【每秒60帧】被认为是流畅动画的标准。这意味着每帧的渲染时间需要控制在16.67毫秒以内。帧率越高,动画越流畅;反之,帧率越低,动画就越卡顿。

动画性能问题和优化技巧

常见性能问题

大量DOM操作】频繁的DOM操作导致重排和重绘增加浏览器的渲染负担。

未优化的动画属性】CSS属性某些(widthheighttopleft)会触发布局重排,影响性能。

不当的JS逻辑】在动画中使用复杂的JavaScript计算逻辑,会占用大量的CPU时间,导致动画卡顿。

 优化动画性能技巧

1、使用硬件加速

硬件加速是通过GPU是图形处理器(Graphics Processing Unit)来渲染某些特定的CSS属性(如transformopacity),从而减轻CPU的渲染负担。要启用硬件加速,可以使用以下方法:

.element {transform: translateZ(0);will-change: transform, opacity;
}

通过添加transform: translateZ(0)will-change,可以让浏览器提前优化这些属性的渲染过程。

2、优化CSS动画属性

在进行CSS动画时,尽量使用transformopacity属性,而不是topleftwidthheight等属性。后者会触发布局重排(reflow),严重影响性能。

推荐的动画属性:

.element {animation: move 2s infinite;
}@keyframes move {from { transform: translateX(0); }to { transform: translateX(100px); }
}

不推荐的动画属性:

.element {animation: move 2s infinite;
}@keyframes move {from { left: 0; }to { left: 100px; }
}

3. 减少DOM操作 

尽量减少对DOM的直接操作,尤其是导致重排的操作。可以将需要改变的属性放在transform中操作,或者通过requestAnimationFrame优化JS动画的执行

4. 使用轻量级的动画库    并控制动画复杂度

  • 当动画涉及大量的JS逻辑,选择一个轻量级且高效的动画库,如GSAP、Anime.js等,这些库通常会对性能进行深度优化,可以帮助你更好地管理动画。
  • 在复杂的动画场景中,适当减少动画的复杂度和元素数量是保持高帧率的关键。对于一些细微的动画效果,尽量简化,以确保整体流畅性。

实战案例说明

优化一个卡顿的动画

优化后的动画帧率显著提升,能够在各种设备上保持流畅。通过简化动画属性并启用硬件加速,我们成功地减少了CPU的负担,确保了动画的高效执行。

原始代码:一个简单的滑动动画,但由于使用了left属性,导致动画卡顿

<div class="box"></div><style>
.box {position: absolute;width: 100px;height: 100px;background-color: red;left: 0;animation: slide 5s infinite;
}@keyframes slide {0% { left: 0; }100% { left: 90%; }
}
</style>

优化代码:将left属性替换为transform属性,启用硬件加速,使得动画更加流畅。

<div class="box"></div><style>
.box {position: absolute;width: 100px;height: 100px;background-color: red;transform: translateX(0);animation: slide 5s infinite;will-change: transform;
}@keyframes slide {0% { transform: translateX(0); }100% { transform: translateX(90vw); }
}
</style>

此文章借鉴了下面博主的优秀文章,万分感谢 

网站链接


http://www.ppmy.cn/server/133222.html

相关文章

鸿蒙应用,如何保存用户的 token

在鸿蒙应用中&#xff0c;保存用户的token通常涉及数据持久化技术&#xff0c;以确保即使用户关闭应用或设备重启&#xff0c;token也能被保留下来。以下是一些保存用户token的常用方法&#xff1a; 一、使用PersistentStorage PersistentStorage是鸿蒙系统提供的一种数据持久…

大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

MySQL中8.0为啥引入索引跳跃扫描(Index Skip Scan)

索引跳跃扫描&#xff08;Index Skip Scan&#xff09; 是一种优化查询的技术&#xff0c;尤其在联合索引中用于减少扫描的无效行数。它通过"跳跃"式的扫描方式&#xff0c;避免了对索引中无用部分的扫描&#xff0c;从而提升查询效率。这种技术适合特定场景&#xf…

Java项目-基于Springboot的在线外卖系统项目(源码+说明).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

torch.nn.ModuleList介绍

torch.nn.ModuleList 是 PyTorch 中的一个容器类&#xff0c;用于存放多个子模块&#xff08;nn.Module&#xff09;&#xff0c;并将这些子模块注册为当前模块的属性。与 Python 原生的 list 类似&#xff0c;它可以存储一组模块&#xff0c;但是与普通的 Python 列表不同&…

特步引入IPD管理,钉钉项目 Teambition 助力高效产品研发管理

中国是全球第二大消费市场&#xff0c;运动鞋服行业拥有着巨大的发展潜力。在过去五年时间里&#xff0c;随着中国产品品牌和质量的提升&#xff0c;体育市场的占有率格局发生了显著变化&#xff0c;不同于部分国际品牌巨头营收持续减弱&#xff0c;国产领军体育运动品牌「特步…

vue video播放m3u8监控视频

很关键的问题 vite创建的项目不需要import ‘videojs-contrib-hls’ 导入就报错 直接添加如下代码即可 html5: {vhs: {overrideNative: true},nativeVideoTracks: false,nativeAudioTracks: false,nativeTextTracks: false} 下面是完整组件示例 <template><div>…

PyTorch 的 DataLoader 类介绍

DataLoader 类 功能与作用 PyTorch 是一个流行的开源机器学习库&#xff0c;它提供了一个名为 DataLoader 的类&#xff0c;用于加载数据集并将其封装成一个可迭代的对象。DataLoader 可以自动地将数据集划分为多个批次&#xff0c;并在训练过程中迭代地返回这些批次。是用于加…