Рашэнне: setInterval не можа нармальна працаваць у фонавым рэжыме аглядальніка.
Даведка
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');