Решение: setInterval не может нормально работать в фоновом режиме браузера.
Справка
WorkerЧто такое "Web Worker"
«Web Worker» предоставляет простой способ веб-содержимому запускать сценарии в фоновом потоке. Потоки могут выполнять задачи, не нарушая пользовательский интерфейс. Кроме того, они могут выполнять ввод-вывод с помощью XMLHttpRequest. После создания рабочий может отправить сообщение в код JavaScript, который его создал, отправив сообщение в обработчик событий, указанный в коде (и наоборот).
инструкции
В приведенном ниже примере кода мы реализуем простейший таймер и позволяем ему срабатывать каждые 100 миллисекунд.
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");
Стандартное использование
В приведенном выше примере мы создали адрес с помощью createObjectURL. Поскольку код, который нам нужно выполнить, относительно прост, этот метод будет более кратким. Когда код в задаче, которую нам нужно выполнить, более сложен, мы можем написать задачу отдельно как независимый файл js. Для получения дополнительной информации обратитесь к следующему коду. Есть более подробные введения, вы можете обратиться к справочным материалам вверху статьи.
var timmer = new Worker('worker.js');