Solução: setInterval não pode ser executado normalmente no fundo do navegador.
Referência
WorkerO 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');