解決:setInterval在瀏覽器後台無法正常運行。

參考資料

Worker

什麼是“Web Worker”

“Web Worker”為Web內容在後台線程中運行腳本提供了一種簡單的方法。線程可以執行任務而不干擾用戶界面。此外,他們可以使用XMLHttpRequest執行 I/O。一旦創建, 一個worker 可以將消息發送到創建它的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');