Рішення: setInterval не може нормально працювати у фоновому режимі браузера.

Довідково

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');