你正在運行一個setInterval
或一系列setTimeout
秒。
每個人都排隊等待在功能中指定的點之後運行。
Google會將您網頁上的所有內容都節流下來,每秒更新幾次... ...所以如果您的計時器設置爲在30fps或其他任何位置移動設備並進行動畫製作,那麼您已經讓Google觸發一輪更新(無論您有什麼計劃),這無疑會調用請求的東西另一個更新,這將要求一個又一個的...
...當你切換回來,你有數百個(或幾萬)這些更新等待發生,現在,而不是在30fps發生,你有一堆這些東西在等待......他們都已通過他們的「不跑,直到......」時間,他們都會嘗試儘可能快地進行更新,直到您被捕捉到計時器再次通電的位置。
如果瀏覽器支持在頁面可見性API的組件,然後暫停您的來電時,頁面是不可見的。
if (!document.hidden) { doStuff(); }
OR
document.addEventListener("visibilitychange", function (evt) {
if (evt.visibilityState === "hidden") { myApp.pause(); }
else if (evt.visibilityState === "visible") { myApp.resume(); }
});
如果它不支持的API,那麼你可以嘗試填充工具它,使用window.onblur
,或以其他方式。
也就是說,如果瀏覽器不支持頁面可見性API,它也不會對頁面代碼進行硬核限制。
這不是100%的保證,而是半可能性。
[Javascaript任務Chrome可能會在選項卡切換到後臺時掛起](http://stackoverflow.com/questions/13408597/javascaript-tasks-chrome-is-suspending-when-a-tab-is - 切換到後臺) –