obtener una animación suave para un juego de lienzo

Cómo obtener una mejor animación, dinámicamente, incluso cuando el navegador está ocupado o inactivo, para diferentes dispositivos que tienen diferente capacidad de hardware.

He intentado de muchas maneras y todavía no puedo encontrar la manera correcta de hacer que el juego muestre una mejor animación.

Esto es lo que probé:

var now;
var then = Date.now();
var delta;

window.gamedraw = function(){

   now = Date.now();
   delta = now - then;

   if(delta > 18){
        then = now - (delta % 18);
        game_update();
   }

}

window.gameloop = setInterval(window.gamedraw,1);

18 es el valor del intervalo para actualizar el juego, pero cuando el navegador está ocupado, este intervalo no es bueno y debe reducirse. ¿Cómo obtener una mejor animación dinámicamente, incluso cuando el navegador está inactivo o ocupado?

Supongo que el valor del intervalo es el problema, porque si el intervalo es menor, entonces la animación del juego es muy rápida, si este valor es 18, entonces la animación del juego es buena pero no cuando el navegador está ocupado, y no tengo idea de cómo cambiarlo dinámicamente .

Respuestas a la pregunta(3)

Su respuesta a la pregunta