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