requestAnimationFrame()でパフォーマンスの問題が発生しました。requestAnimationFrame()パフォーマンスの問題
次のコードを検討してください。これは、この時間デルタが20msより大きいたびに最後のフレーム以降の時刻を出力する単純なループです。
const glob_time_info = {delta_time: 0.0, last_frame: performance.now()};
var render = function (timestamp) {
glob_time_info.delta_time = timestamp - glob_time_info.last_frame;
glob_time_info.last_frame = timestamp;
if(glob_time_info.delta_time > 20)
console.log(glob_time_info.delta_time);
requestAnimationFrame(render);
};
render(performance.now());
私はそれが60回秒(私のモニタとして60Hzの)を実行しようとするため、このスニペットは、何かを印刷することはありませんrequestAnimationFrameのを理解できるように。 したがって、時間デルタは常に約16-17ms程度にする必要があります。
しかし、数秒ごとに約33msの時間が印刷されます。 なぜですか?
は、私がここでi5-6600UPDATE 窓とUbuntu用NITのスクリプトの出力を所有クローム54とFirefox 49でWindows 10でこれを経験しました。 Windows、何してるの? のWindows 10(PC): のWindows 8(下記のように同じネットブック): のUbuntu(上記と同じネットブック):
実行時に16に固定されています。おそらく、あなたのコンピュータが行っているガベージコレクションやその他のものに関係しています。 – JonSG
何かがスレッドをブロックしていても、何ミリ秒間でもブロックされても、成功することはありません – adeneo
私はGCについても考えましたが、彼は何を収集しなければなりませんか?そして、数秒ごとにフレームレートが30FPSに下がるか、または悪化すると、どのようにスムーズなアニメーションを作成できますか? –