我遇到了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());
正如我理解requestAnimationFrame此片段不應該打印任何東西,因爲它試圖每秒運行60次(60Hz作爲我的顯示器)。因此時間增量應該總是在16-17ms左右。
但它每隔幾秒打印33ms的時間。 爲什麼?
我使用Chrome 54和Firefox 49。經歷過這個在Windows 10我擁有i5-6600
UPDATE 這裏尼特的腳本爲Windows和Ubuntu的輸出。 Windows,你在做什麼? 的Windows 10(PC): Windows 8的(相同的上網本如下): 的Ubuntu(同上上網本):
它被固定在16並且當我運行時改變。可能與您的計算機正在做的垃圾收集和其他東西有關。 – JonSG
「試」是關鍵字,如果有什麼阻塞線程,即使幾毫秒,它不再成功 – adeneo
我也想過GC,但每隔幾秒?並且他必須收集什麼:)如果每隔幾秒鐘幀速下降到30FPS或更低時,如何製作流暢的動畫 –