搜索
首页web前端css教程优化CSS:通过DevTools调整动画性能

CSS动画性能优化指南:利用浏览器开发者工具提升动画流畅度

Optimizing CSS: Tweaking Animation Performance with DevTools

本文与SiteGround合作创作。感谢支持SitePoint的合作伙伴们。

众所周知,CSS动画性能通常很高。然而,对于包含大量元素或复杂动画的场景,如果代码没有针对性能进行优化,则会导致动画卡顿,影响用户体验。

本文将介绍一些实用的浏览器开发者工具功能,帮助您检查CSS动画背后的运行机制。当动画出现卡顿时,您可以更好地了解原因并进行修复。

关键要点

  • 利用浏览器开发者工具优化CSS动画性能,识别导致动画卡顿的问题,并深入了解动画的底层运行情况。这些工具可以检查帧率、审查、编辑和调试代码,以及分析可能影响性能的布局和绘制操作。
  • 为了获得流畅的动画效果,目标帧率应达到60fps(每秒帧数)。为了确保动画更流畅,只对CSS的不透明度(opacity)、变换(transforms)和滤镜(filters)进行动画效果设置。动画化其他属性可能会给浏览器带来压力,迫使其在极短时间内执行代价高昂的任务,从而导致糟糕的结果。
  • 使用will-change CSS属性,或translateZ(0)translate3d(0,0,0)技巧来强制浏览器将某些属性更改的工作交给GPU(图形处理单元)处理。这利用了硬件加速,并减轻了浏览器主线程的部分压力。但是,过度使用可能会导致您试图避免的问题,例如动画卡顿。

开发者工具与CSS性能分析

您的动画需要达到60fps才能在浏览器中流畅运行。帧率越低,动画效果越差。这意味着浏览器每帧最多只有大约16毫秒的时间来完成其工作。但在这段时间内它做了什么?你如何知道你的浏览器是否跟上了所需的帧率?

我认为,在评估动画质量时,没有什么比用户体验更重要的了。然而,现代浏览器的开发者工具虽然并不总是100%可靠,但它们变得越来越智能,您可以使用它们来审查、编辑和调试代码。

当您需要检查帧率和CSS动画性能时,情况也是如此。以下是它的工作原理。

Firefox性能工具探索

在本文中,我使用的是Firefox性能工具。另一个主要的竞争者是Chrome性能工具。您可以选择您最喜欢的工具,因为这两个浏览器都提供了强大的性能功能。

要在Firefox中打开开发者工具,请选择以下选项之一:

  • 右键单击您的网页,然后在上下文菜单中选择“检查元素”。
  • 或者使用键盘快捷键:在Windows和Linux上按Ctrl Shift I,在macOS上按Cmd Opt I

接下来,单击“性能”选项卡。在这里,您会找到一个按钮,可以让您开始录制网站的性能数据:

Optimizing CSS: Tweaking Animation Performance with DevTools 按下该按钮并等待几秒钟,或者在页面上执行某些操作。完成后,单击“停止性能录制”按钮:

Optimizing CSS: Tweaking Animation Performance with DevTools 瞬间,Firefox就会向您呈现大量组织良好的数据,帮助您了解代码中存在哪些问题。

“性能”面板中的录制结果如下所示:

Optimizing CSS: Tweaking Animation Performance with DevTools “瀑布流”部分非常适合检查与CSS过渡和关键帧动画相关的问题。其他部分是“调用树”和“JS火焰图”,您可以使用它们来找出JavaScript代码中的瓶颈。

瀑布流视图顶部有一个摘要部分和一个详细的细分。在这两者中,数据都是用颜色编码的:

  • 黄色条表示JavaScript操作。
  • 紫色条表示计算HTML元素的CSS样式(重新计算样式)和页面布局(布局)。布局操作对于浏览器来说代价相当高昂,因此,如果您动画化涉及重复布局(也称为“回流”——例如marginpaddingtopleft等)的属性,则结果可能会卡顿。
  • 绿色条表示将元素绘制到一个或多个位图中(绘制)。动画化诸如colorbackground-colorbox-shadow等属性会涉及代价高昂的绘制操作,这可能是动画迟缓和用户体验不佳的原因。

您还可以筛选要检查的数据类型。例如,我只对CSS相关数据感兴趣,因此我可以通过单击屏幕左上角的筛选图标来取消选择其他所有内容:

Optimizing CSS: Tweaking Animation Performance with DevTools 瀑布流摘要下方的绿色大条表示帧率信息。

健康的表示应该看起来相当高,但最重要的是一致——也就是说,没有太多深的间隙。

让我们用一个例子来说明这一点。

性能工具实战

这是一个使用@keyframes关键字的简单CSS动画。测试页面如下所示:

Optimizing CSS: Tweaking Animation Performance with DevTools Optimizing CSS: Tweaking Animation Performance with DevTools 矩形紫色框以无限循环的方式滑入和滑出视野。

我通过动画化表示屏幕上矩形框的<div>元素的<code>margin-left属性来实现这一点。@keyframes动画块如下所示:

@keyframes slide-margin {
  100% {
    margin-left: 0;
  }
}

我从这个动画中获得的性能数据如下所示:

Optimizing CSS: Tweaking Animation Performance with DevTools 帧率可视化看起来有点参差不齐,平均帧率为44.82fps,有点低。

此外,请注意在动画过程中发生的所有布局和绘制操作。这些是浏览器在其主线程上执行的代价高昂的操作,这对性能有负面影响。

最后,如果您访问“检查器”工具,单击“动画”部分,然后将鼠标悬停在动画名称上,则会弹出一个信息框,其中包含有关当前动画的所有相关数据。如果您的动画经过优化,则会显示一条说明该事实的消息。在本例中,没有消息:

Optimizing CSS: Tweaking Animation Performance with DevTools 现在,我将更改我的代码并进行新的录制,因为浏览器使用此@keyframes块动画化CSStranslate3d()属性:

@keyframes slide-three-d {
  100% {
    transform: translate3d(0, 0, 0);
  }
}

这是性能录制的图像:

Optimizing CSS: Tweaking Animation Performance with DevTools 现在帧率更高(56.83fps),瀑布流没有显示代价高昂的布局和绘制操作。

此外,如果您打开开发者工具的“检查器”选项卡,访问“动画”面板并将鼠标悬停在动画名称上,您会看到类似这样的内容:

Optimizing CSS: Tweaking Animation Performance with DevTools 与动画名称相关的Info框指出所有动画都已优化,这对您的网站访问者来说是个好消息。

仅动画化CSS的opacitytransformsfilters

您可能以前听过这条建议,但以防万一,还是值得再讲一遍:如果您希望动画流畅运行,则只对CSS的不透明度(opacity)、变换(transforms)和滤镜(filters)进行动画效果设置。动画化其他所有内容都会给浏览器带来压力,迫使其在极短时间内执行代价高昂的任务,这通常不会产生最佳结果。

正如浏览器中的性能工具所证实的那样,重复的布局和绘制操作并非您的朋友。

但是,每个浏览器处理CSS属性的方式略有不同。如果您想知道哪个浏览器会为哪些属性触发布局和绘制操作(尤其是在更新这些属性的值时,这是Web动画中涉及的操作),请访问CSS Triggers。

为了确保动画性能,一种流行的方法是强制浏览器将某些属性更改的工作交给GPU(图形处理单元),这减轻了浏览器主线程的部分压力,并利用了硬件加速。您可以使用will-change CSS属性,或translateZ(0)translate3d(0,0,0)技巧来实现。所有这些技巧都有效,但如果您过度使用,您实际上可能会得到您试图避免的结果,即动画卡顿。

我不打算详细介绍Web动画性能的硬件加速,但如果您想深入了解,请查看下面列出的资源。

资源

关于CSS动画性能的常见问题解答 (FAQs)

影响CSS动画性能的关键因素有哪些?

CSS动画的性能受多种因素影响。动画的复杂性、正在动画化的元素数量以及正在动画化的属性都会发挥作用。动画化诸如transformopacity之类的属性往往性能更好,因为它们不会触发布局或绘制操作。但是,动画化诸如widthheightmargin之类的属性可能会导致布局偏移和重绘,从而减慢动画速度。此外,设备的硬件和浏览器的渲染引擎也会影响CSS动画的性能。

如何衡量CSS动画的性能?

您可以使用浏览器开发者工具来衡量CSS动画的性能。例如,在Chrome中,您可以使用“性能”选项卡来记录和分析动画的运行时间。此工具提供了动画生命周期中时间消耗的详细细分,帮助您识别任何性能瓶颈。

流畅CSS动画的理想帧率是多少?

流畅动画的理想帧率是每秒60帧(fps)。这是因为大多数设备每秒刷新屏幕60次。因此,为了创建流畅的动画,您应该目标每16.67毫秒(1秒/60)更新一次动画,这对应于60fps。

如何优化CSS动画以获得更好的性能?

有多种策略可以优化CSS动画以获得更好的性能。一种常见的方法是动画化不会触发布局或绘制操作的属性,例如transformopacity。此外,减少正在动画化的元素数量和简化动画也可以提高性能。使用will-change属性还可以帮助浏览器通过提示可能要动画化的属性来优化动画。

就性能而言,CSS动画和JavaScript动画有什么区别?

CSS动画通常比JavaScript动画性能更好。这是因为CSS动画在浏览器的渲染引擎上运行,与主JavaScript线程分开。这意味着即使JavaScript线程繁忙,CSS动画仍然可以流畅运行。但是,JavaScript动画提供了更多控制和灵活性,这对于复杂的动画可能是有益的。

硬件加速如何影响CSS动画性能?

硬件加速可以显著提高CSS动画的性能。启用硬件加速后,浏览器会将一些渲染任务卸载到设备的GPU,从而释放CPU来处理其他任务。这可以导致更流畅的动画,尤其是在复杂的动画或涉及大量元素的动画中。

requestAnimationFrame函数在动画性能中起什么作用?

requestAnimationFrame函数是一个JavaScript方法,它允许更有效的动画,方法是在下一次重绘之前调用指定的函数。这意味着动画可以与设备的刷新率同步,从而实现更流畅的动画。它还允许浏览器优化动画,减少CPU使用率并提高性能。

如何使用DevTools的“性能”面板来提高CSS动画性能?

DevTools中的“性能”面板提供了动画生命周期中时间消耗的详细细分。通过分析这些数据,您可以识别任何性能瓶颈并相应地优化动画。例如,如果大量时间用于绘制,您可能需要考虑动画化不会触发绘制操作的属性。

布局抖动对CSS动画性能的影响是什么?

布局抖动是指由于DOM中的更改而浏览器必须重复计算布局信息的情况。这会严重影响CSS动画的性能,导致动画运行缓慢或出现卡顿。为了避免布局抖动,尝试将DOM读写操作批量在一起,并避免动画化触发布局操作的属性。

如何使用CSSwill-change属性来提高动画性能?

will-change属性允许您提前告知浏览器您计划动画化的属性。这允许浏览器在动画开始之前执行任何必要的优化,这可能会导致更流畅的动画。但是,应谨慎使用will-change属性,因为过度使用可能会导致浏览器消耗更多资源并对性能产生负面影响。

(请注意,以上所有链接都需要替换为实际链接)

以上是优化CSS:通过DevTools调整动画性能的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
什么是CSS网格?什么是CSS网格?Apr 30, 2025 pm 03:21 PM

CSS网格是创建复杂,响应式Web布局的强大工具。它简化了设计,提高可访问性并提供了比旧方法更多的控制权。

什么是CSS Flexbox?什么是CSS Flexbox?Apr 30, 2025 pm 03:20 PM

文章讨论了CSS FlexBox,这是一种布局方法,用于有效地对齐和分布响应设计中的空间。它说明了FlexBox用法,将其与CSS网格进行了比较,并详细浏览了浏览器支持。

我们如何使用CSS使网站迅速响应?我们如何使用CSS使网站迅速响应?Apr 30, 2025 pm 03:19 PM

本文讨论了使用CSS创建响应网站的技术,包括视口元标签,灵活的网格,流体媒体,媒体查询和相对单元。它还涵盖了使用CSS网格和Flexbox一起使用,并推荐CSS框架

CSS盒装属性有什么作用?CSS盒装属性有什么作用?Apr 30, 2025 pm 03:18 PM

本文讨论了CSS盒装属性,该属性控制了元素维度的计算方式。它解释了诸如Content-Box,Border-Box和Padding-Box之类的值,以及它们对布局设计和形式对齐的影响。

我们如何使用CSS动画?我们如何使用CSS动画?Apr 30, 2025 pm 03:17 PM

文章讨论使用CSS,关键属性并与JavaScript结合创建动画。主要问题是浏览器兼容性。

我们可以使用CSS向我们的项目添加3D转换吗?我们可以使用CSS向我们的项目添加3D转换吗?Apr 30, 2025 pm 03:16 PM

文章讨论了Web项目的3D转换,关键属性,浏览器兼容性和性能注意事项的讨论。(角色计数:159)

我们如何在CSS中添加梯度?我们如何在CSS中添加梯度?Apr 30, 2025 pm 03:15 PM

文章讨论了使用CSS梯度(线性,径向,重复)来增强网站视觉效果,添加深度,焦点和现代美学。

CSS中的伪元素是什么?CSS中的伪元素是什么?Apr 30, 2025 pm 03:14 PM

文章讨论了CSS中的伪元素,它们在增强HTML样式方面的使用以及与伪级的差异。提供实用的例子。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具