目录
关键要点
开发者工具与CSS性能分析
Firefox性能工具探索
性能工具实战
资源
关于CSS动画性能的常见问题解答 (FAQs)
影响CSS动画性能的关键因素有哪些?
如何衡量CSS动画的性能?
流畅CSS动画的理想帧率是多少?
如何优化CSS动画以获得更好的性能?
就性能而言,CSS动画和JavaScript动画有什么区别?
硬件加速如何影响CSS动画性能?
如何使用DevTools的“性能”面板来提高CSS动画性能?
布局抖动对CSS动画性能的影响是什么?
如何使用CSSwill-change属性来提高动画性能?
首页 web前端 css教程 优化CSS:通过DevTools调整动画性能

优化CSS:通过DevTools调整动画性能

Feb 16, 2025 pm 12:10 PM

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

热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

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

如何将CSS网格用于粘头和页脚 如何将CSS网格用于粘头和页脚 Apr 02, 2025 pm 06:29 PM

CSS网格是一系列属性的集合,旨在使布局比以往任何时候都容易。像任何东西一样,那里有一点学习曲线,但是网格是

Google字体可变字体 Google字体可变字体 Apr 09, 2025 am 10:42 AM

我看到Google字体推出了新设计(Tweet)。与上一次大型重新设计相比,这感觉更加迭代。我几乎无法分辨出区别

See all articles