У меня возникли проблемы с производительностью с requestAnimationFrame().requestAnimationFrame() проблема с производительностью
Рассмотрите следующий код. Это простой цикл, который печатает время с момента последнего кадра каждый раз, когда эта дельта больше 20 мс.
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 раз в секунду (60 Гц, как мой монитор). Поэтому временная дельта всегда должна быть примерно в пределах 16-17 мс.
Но он печатает раз около 33 мсек каждые несколько секунд. Почему?
Я испытал это на окнах 10 с Chrome 54 и Firefox 49. Я владеть i5-6600
UPDATE Вот вывод скрипта NIT в оконное и убунту. Windows, что вы делаете? для Windows 10 (PC): WIndows 8 (такой же нетбук, как показано ниже): Ubuntu (тот же нетбук, как описано выше):
Он привязан к 16 и меняется, когда я запускаю его. Вероятно, связано с сборкой мусора и другими материалами, которые делает ваш компьютер. – JonSG
«пытается» быть ключевым словом, если что-то блокирует поток, даже на несколько миллисекунд, оно больше не выполняется – adeneo
Я также думал о GC, но каждые несколько секунд? и что он должен собирать :) И как вы можете делать гладкую анимацию, если каждые несколько секунд частота кадров падает до 30FPS или хуже –