Насколько я знаю, нет способа исправить это, кроме как сделать ваш код менее ресурсоемким.
Chrome, кажется, самый быстрый браузер, но обычно FF не сильно отстает, но IE все еще медленный. В зависимости от методов рендеринга, canvas, svg или webGL, это также очень зависит от вашего локального оборудования, так как для большинства вещей использует клиентскую сторону, а для сложных рендерингов webGL требуется мощный GPU для достижения хороших частот кадров.
Есть способы измерить частоту кадров на лету и соответственно изменить анимацию.
Вот очень простой пример, который измеряет частоту кадров.
function step(timestamp) {
var time2 = new Date;
var fps = 1000 / (time2 - time);
time = time2;
document.getElementById('test').innerHTML = fps;
window.requestAnimationFrame(step);
}
var time = new Date(), i = 0;
window.requestAnimationFrame(step);
<div id="test"></div>
Это всего лишь мгновенная мера, которая не настолько точна, вам, вероятно, понадобится что-то, что будет измеряться через некоторое время, чтобы получить более правильную частоту кадров для используемого браузера.
Также обратите внимание на аргумент timestamp
, который в requestAnimationFrame
представляет собой метку времени с высоким разрешением с минимальной точностью 1 миллисекунды, которая также может использоваться для определения скорости анимации и любой задержки в браузере.