Perf css动画与过渡

问题描述 投票:-2回答:1

我想知道css动画(关键帧)与css过渡有什么差异。

在我的测试中,似乎有些情况下过渡期的表现远比关键帧好。这篇文章也提出了同样的建议,但它是2015年的,所以认为它可能已经过时了。https:/www.pixelstech.netarticle1434375977-CSS3-animation-vs-CSS3-transition

审视MDN https:/developer.mozilla.orgen-USdocsWebPerformanceCSS_JavaScript_animation_performance。它指出:"在性能方面,用CSS过渡或动画实现动画没有区别。在本文中,它们都被归入了同一个基于CSS的范畴。"

所以我很惊讶在测试中看到这样的差异。也许它们在firefox上是一样的,但使用Chrome浏览器,我绝对看到了差异。

我在codesandbox上做了一些测试,用关键帧与过渡来显示动画jank。这里有一些重要的因素:1.我同时在转换和边界半径上做动画。我知道你 "不应该 "对边框-半径进行动画处理,但这是测试的一部分。2.当我把这2个测试合并到一个SPA中,并在它们之间切换时,它们都表现得很好,所以这可能与页面加载有关。

要查看测试中所有的jankiness选择 "mid-tier mobile "使用chrome开发工具。

  1. janky css动画https:/codesandbox.iosperf-test-css-animation-nl6xs。

  2. 平滑的css过渡https:/codesandbox.iosperf-test-css-transition-fgd7w。

如果能得到任何帮助,将不胜感激。我相信我们无法解决这个问题,但想知道为什么关键帧有时与过渡相比性能很差。

谢谢!

css animation css-animations transition jank
1个回答
0
投票

两者看起来都应该是相当高效的动画,因为它们只是复合变化(因为它们是按比例动画,这是高效的)。https:/csstriggers.comtransform)。

我想问题可能出在你的测试不是一个 "公平 "的对比。

css动画(关键帧: 这个动画直接在客户端浏览器上发生。同时,它还在执行一些更多的情感代码,用于 keyframes.

css过渡: 当React完成挂载时,这个动画就会发生(就像它在一个 useEffect 钩子),而不执行一个 keyframes 的功能。

所以,第一个 css动画(关键帧 测试可能会受到影响,因为React在完成其生命周期事件时,占用了浏览器动画的宝贵资源。

此外,额外的情感 keyframes 呼叫可能会减慢它的速度--它使另一个 css 召唤 https:/github.comemotion-jsemotionblob6cb8d15438b01b8623af42f304d5ea3032332187packagescoresrckeyframes.js#L11。 所以你实际上是在说 css 两次与关键帧测试。

可能最好用纯HTML+CSS做一个对比,这样React或JS就不会妨碍你,让你产生一个比另一个好的假象。

© www.soinside.com 2019 - 2024. All rights reserved.