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