css3 – CSS关键帧动画CPU使用率很高,应该是这样吗?

前端之家收集整理的这篇文章主要介绍了css3 – CSS关键帧动画CPU使用率很高,应该是这样吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在几个元素上使用以下关键帧动画:
@keyframes redPulse {
    from { background-color: #bc330d; Box-shadow: 0 0 9px #333; }
    50% { background-color: #e33100; Box-shadow: 0 0 18px #e33100; }
    to { background-color: #bc330d; Box-shadow: 0 0 9px #333; }
}
@-webkit-keyframes redPulse {
    from { background-color: #bc330d; Box-shadow: 0 0 9px #333; }
    50% { background-color: #e33100; Box-shadow: 0 0 18px #e33100; }
    to { background-color: #bc330d; Box-shadow: 0 0 9px #333; }
}
.event_indicator {
    display: inline-block;
    background-color: red;
    width: 5px;
    margin-right: 5px;

    -webkit-animation-name: redPulse;
    -webkit-animation-duration: 1s;
    -webkit-animation-iteration-count: infinite;

    animation-name: redPulse;
    animation-duration: 1s;
    animation-iteration-count: infinite;
}

在我的电脑上,我在Chrome和Firefox中获得了大约40%的cpu使用率。
它是动画的当前状态(好,但现在不可用)或者我缺少一些魔法属性

您可以使用相同的动画检查以下示例:
http://jsfiddle.net/Nrp6Q/

解决方法

是的,这是正常的,因为你在页面上有几个无限循环的动画。因此,cpu在渲染这些元素的同时继续工作。有一个“魔术”属性,将显着减少cpu使用,这是:
transform: translateZ(0);

这将复合元素到自己的图层(通过欺骗浏览器认为它将进行3D变换),浏览器应该在大多数情况下利用GPU加速,减轻cpu的负担。对我来说,这削减了约20%(几乎一半)。

要阅读更多关于这个技术看看:http://ariya.blogspot.com/2011/07/fluid-animation-with-accelerated.html

此外,动画中的关键帧越多,它的收益也越大。只需尝试中间关键帧切出动画,你会看到另一个实质(〜10-12%)的cpu使用下降。

最后,并非所有属性都相等 – Box-shadow对于浏览器而言比使用background-color更加灵活。离开所有的关键帧完好,但丢弃Box-shadow属性,使用translateZ(0)技巧我的cpu使用率徘徊在只有10-11%。

尽管痛心我说这个,对于无限循环动画,一个动画的.gif将执行得比CSS3在浏览器动画的当前状态下更好,特别是如果你计划让他们中的许多人保持渲染在页面一段时间。

更新2017年:

对于那些仍然找到他们的方式来解决这个问题和答案,translate3d(0,0,0)提供了与translateZ(0)相同的好处,你只是同时设置translateX()和translateY()。请忽略@Farside评论,因为他在他的演示中使用translate3d(X,Y,Z),但不会将其与translate(X,Y)进行比较,这将显示使用此技术仍然有很大的区别。

原文链接:https://www.f2er.com/css/220960.html

猜你在找的CSS相关文章