2017-03-06 106 views
0

當我創建了一個簡單的codepen來調試爲什麼我的反應應用程序中的某個組件使用瞭如此之多的CPU時,我驚訝地發現這是我看到20-30%CPU的Chrome中的這個小CSS過渡。過渡動畫,高cpu?

http://codepen.io/anon/pen/wJzmxe

任何人有想法,我們怎麼可能會以不同辦法呢?或者爲什麼會出現這種情況?

<div id='foo'></div> 

#foo { 
    background: red; 
    height: 20px; 
    max-width: 500px; 
    transition: width linear; 
    transition-duration: 10s; 
    width: 0; 
} 

var yes = true 
setInterval(function() { 
    var size = yes ? '500px' : '0px' 
    yes = !yes 
    document.getElementById('foo').style.width = size 
}, 10*1000) 
+0

你爲什麼不使用一個類來驅動動畫? –

+0

'10s'是一個快速過渡的長時間...... –

+0

注意,您可以使用Chrome DevTools的時間軸和動畫標籤查看渲染過程中發生了什麼,並優化了動畫的性能。 – cloudworks

回答

2

嘗試轉變transform代替 - 對transform GET硬件加速,其中過渡width不和是少高性能的轉換。

setInterval(function() { 
 
    document.getElementById('foo').style.transform = 'scaleX(1)' 
 
}, 10*1000)
#foo { 
 
    background: red; 
 
    height: 20px; 
 
    max-width: 500px; 
 
    transition: transform linear; 
 
    transition-duration: 10s; 
 
    transform: scaleX(0); 
 
    transform-origin: 0; 
 
}
<div id='foo'></div>

+0

這個好得多,但仍然使用比我們最終覺得合適的更多的CPU。我們正在爲音頻播放器製作一個進度表,但最終我們決定每隔1秒左右使用setTimeouts,因爲這是真正用於接近0 cpu的唯一解決方案。如果你看看那裏的大多數js玩家,我相信,進度計總是不平穩,這正是這個原因。 – eagspoo