Solução: setInterval não pode ser executado normalmente no fundo do navegador.

Referência

Worker

O que é "Web Worker"

"Web Worker" fornece uma maneira simples para o conteúdo da web executar scripts em um thread de segundo plano. Threads podem realizar tarefas sem perturbar a interface do usuário. Além disso, eles podem realizar E / S usando XMLHttpRequest. Depois de criado, um trabalhador pode enviar uma mensagem para o código JavaScript que o criou, postando a mensagem no manipulador de eventos especificado pelo código (e vice-versa).

Instruções

No código de exemplo abaixo, implementamos o cronômetro mais simples e o deixamos disparar a cada 100 milissegundos.

            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 padrão

No exemplo acima, criamos um endereço usando createObjectURL. Como o código que precisamos executar é relativamente simples, esse método será mais conciso. Quando o código na tarefa que precisamos executar é mais complicado, podemos escrever a tarefa separadamente como um arquivo js independente. Para obter detalhes, consulte o código a seguir. Existem introduções mais detalhadas; você pode consultar os materiais de referência no início do artigo.

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