Hasta donde yo sé, no hay forma de arreglar esto realmente, aparte de hacer que su código requiera menos recursos.
Chrome parece ser el navegador más rápido, pero generalmente FF no se queda atrás, pero IE sigue siendo lento. Dependiendo de los métodos de renderizado, lienzo, svg o webGL, también depende mucho de su hardware local, ya que utiliza el lado del cliente para la mayoría de las cosas, y las representaciones webGL complicadas necesitan una poderosa GPU para lograr buenos framerates.
Existen formas de medir la tasa de cuadros sobre la marcha, y cambiar sus animaciones en consecuencia.
Aquí hay un ejemplo muy simple que mide la tasa de fotogramas.
function step(timestamp) {
var time2 = new Date;
var fps = 1000/(time2 - time);
time = time2;
\t
document.getElementById('test').innerHTML = fps;
window.requestAnimationFrame(step);
}
var time = new Date(), i = 0;
window.requestAnimationFrame(step);
<div id="test"></div>
Esto es sólo una medida instantánea que no es tan precisa, que probablemente querrá algo que mide más de un cierto tiempo para obtener una velocidad de fotogramas más correcto para el navegador que se utilice.
También tenga en cuenta el argumento timestamp
, que en requestAnimationFrame
es marca de tiempo de alta resolución con una precisión mínima de 1 milisegundos, que también se puede utilizar para deterine la velocidad de la animación, y cualquier retraso navegador.
La forma de resolver esto es hacer que el código que ejecuta desde la devolución de llamada se ejecute rápidamente. Cómo hacer eso es imposible de decir sin ver el código ... –