解決: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');