为什么我的CSS动画在性能监控中导致掉帧严重?
我在做一个加载动画,用了简单的scale变换,但用Chrome DevTools的Performance面板录屏时发现每秒帧数经常掉到30以下,甚至更低。明明只是个简单的放大缩小,不应该这么卡啊?
我试过加了will-change: transform,也用了transform: translateZ(0)开启硬件加速,但效果不明显。是不是我的写法有问题?
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.2); }
}
.loading-dot {
animation: pulse 1.2s ease-in-out infinite;
}
常见坑点:检查一下.loading-dot的父元素有没有同时在变。很多时候动画元素本身没问题,但父容器如果有width/height变化、或者margin/padding在变,甚至父元素自己也有动画,就会拖累整个渲染。因为子元素的transform是相对于父元素容器的,父元素一重绘,子元素也得跟着重算。
另一个可能:你页面里是不是有其他JS在频繁触发?或者这个.loading-dot本身有其他属性在同时变化?比如border、background-color这些属性会触发重绘,比transform这种只触发合成的属性慢得多。
如果实在找不到原因,可以试试这个写法:
scale3d和scale效果一样,但它强制走3D变换,有些浏览器会更好地走GPU加速。
还有个小技巧:如果这个loading点周围有其他复杂元素,可以考虑把它独立出来,减少布局连锁影响。
你先检查一下父元素和同页面的其他JS,看看有没有在偷偷搞事情。