Решение: 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');