Web开发动画与性能优化

ops/2024/10/19 7:25:20/

帧率说明

帧率(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/ops/126659.html

相关文章

穿越沙漠问题

题目&#xff1a;一辆吉普车穿越1000km的沙漠。吉普车的总装油量为500L&#xff0c;耗油率为1L/km。由于沙漠中没有油库&#xff0c;必须先用这辆车在沙漠中建立临时油库。若吉普车用最少的耗油量穿越沙漠&#xff0c;应在哪些地方建立油库&#xff0c;以及各处存储的油量是多少…

第二章:信息建模:概念2

对象、变量和方法 # OPC UA 中最重要的节点类是对象、变量和方法。这些概念也是面向对象编程的产物。对象具有变量和方法&#xff0c;并且可以触发事件。 变量节点类的节点表示一个值。值的数据类型取决于变量。客户端可以读取值、订阅值的更改以及写入值。例如&#xff0c;变…

Spring Web MVC快速入门:掌握Java Web开发基础

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:桃李春风一杯酒&#xff0c;江湖夜雨十年灯&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4…

深入理解Transformer的笔记记录(精简版本)---- ELMO->GPT->BERT

1、ELMO word embedding无法区分多义词的不同语义&#xff0c;其本质上是个静态的方式&#xff0c;所谓静态指的是训练好之后每个单词的表达就固定住了&#xff0c;以后使用的时候&#xff0c;不论新句子上下文单词是什么&#xff0c;这个单词的Word Embedding不会跟着上下文场…

抖音视频制作怎么暂停画面,抖音视频怎么让它有暂停的效果

千万别滥用视频特效&#xff0c;不然它能毁掉你的抖音作品。在创作过程中&#xff0c;应尽量使用类似暂停画面、隐形字幕这样的视觉特效&#xff0c;可以显著提高作品的视觉体验。增强视频表现力的同时&#xff0c;也不会让画面看起来过于夸张。有关抖音视频制作怎么暂停画面的…

Redis是单线程为何性能还高

背景 通常来讲&#xff0c;提到性能优化&#xff0c;我们都会说提高并行度。同样我们知道&#xff0c;Redis是单线程执行命令&#xff0c;那为何还能保持如此的高性能呢&#xff1f; 原因 基于内存访问 Redis 将所有数据存储在内存中&#xff0c;内存的读写速度远远高于磁盘&a…

985研一学习日记 - 2024.10.16

一个人内耗&#xff0c;说明他活在过去&#xff1b;一个人焦虑&#xff0c;说明他活在未来。只有当一个人平静时&#xff0c;他才活在现在。 日常 1、起床6:00√ 2、健身1个多小时 今天练了二头和背部&#xff0c;明天练胸和三头 3、LeetCode刷了3题 旋转图像&#xff1a…

复习:如何理解 React 中的 fiber

React 中的 Fiber 可以理解为 React 16 引入的一种新的协调(reconciliation)引擎,旨在提高 React 应用的性能和响应性。以下是对 React Fiber 的详细解释: 一、Fiber 的定义与背景 Fiber 是对 React 核心算法的一次重新实现,它将渲染工作分解成一系列小的任务单元,这些任…