Solución: setInterval no se puede ejecutar normalmente en segundo plano del navegador.

Referencia

Worker

¿Qué es "Web Worker"?

"Web Worker" proporciona una forma sencilla para que el contenido web ejecute scripts en un hilo de fondo. Los subprocesos pueden realizar tareas sin perturbar la interfaz de usuario. Además, pueden realizar E / S mediante XMLHttpRequest. Una vez creado, un trabajador puede enviar un mensaje al código JavaScript que lo creó, publicando el mensaje en el controlador de eventos especificado por el código (y viceversa).

Instrucciones

En el código de muestra a continuación, implementamos el temporizador más simple y dejamos que se active cada 100 milisegundos.

            var timmer = new Worker(
    URL.createObjectURL(
        new Blob(
            [
                "onmessage=function(event){setInterval(function(){postMessage(1);},100)}",
            ],
            { type: "application/javascript" }
        )
    )
);
timmer.onmessage = function (event) {
    console.log("get message");
};
timmer.postMessage("start");
        

Uso estándar

En el ejemplo anterior, creamos una dirección usando createObjectURL. Dado que el código que necesitamos ejecutar es relativamente simple, este método será más conciso. Cuando el código de la tarea que necesitamos ejecutar es más complicado, podemos escribir la tarea por separado como un archivo js independiente. Para obtener más información, consulte el siguiente código. Hay introducciones más detalladas, puede consultar los materiales de referencia en la parte superior del artículo.

            var timmer = new Worker('worker.js');