背景分頁可能會對瀏覽器效能產生重大負面影響。 特別是電池壽命更長為避免這種情況發生,Chrome 在過去幾年一直對背景分頁設下各種限制。最近還是有許多方式可以進一步改善 本文件將概略說明 Chrome 政策 本文件著重於說明 Chrome 57 版目前的政策。 如需長期策略和更多計畫,請前往 這份文件。
針對背景最佳化應用程式
網頁開發人員應注意,使用者經常在背景開啟許多分頁,這可能會嚴重影響電力用量和電池續航力。在背景中工作 除非有必要 或特定使用者體驗 頁面瀏覽權限 API 應以 ,偵測網頁是否在背景執行,並暫停所有不必要的作業,例如視覺更新。
針對部分網站,這項簡單的最佳化調整可將 CPU 用量降低多達 75%:
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
政策
requestAnimationFrame()
根據說明文件,Chrome 不會在背景中呼叫 requestAnimationFrame()
。這個行為自 2011 年就開始出現。
背景計時器對齊
自 Chrome 11 版本以來, 每個獨立計時器每秒只能執行一次Chrome 會以每秒一次的批次執行這些計時器,確保過程喚醒次數降到最低。播放可聽見音訊的網頁會視為使用者可見,因此不受背景計時器節流限制。在音訊停止播放後,豁免狀態會持續數秒,讓應用程式將下一個音軌加入佇列。
請注意,只有在 Chrome 顯示音訊圖示時,才會播放音訊。靜音音訊串流不符合免除資格。
以預算為依據的背景計時器節流
在 Chrome 57 中推出,以預算為依據的計時器節流是計時器對齊機制的進一步擴充,可對背景計時器的 CPU 使用量額外設限。運作方式如下:
- 每個背景分頁都有在背景執行計時器的時間預算 (以秒為單位)。
- 網頁在背景執行 10 秒後將受到時間預算限制。
- 只有在時間預算為非負值時,才能執行計時器工作。
- 計時器執行後,執行時間會從預算中扣除。
- 預算會隨著時間持續再生 (目前設定為每秒 0.01 秒的速率)。請注意,這個預算重新產生率可調整為 Chrome 會收集更多有關節流行為的資料。
系統會自動豁免以下幾種情況:
- 播放音訊的應用程式視為前景,不會受到限制。
- 應用程式具有即時連線 (WebSocket 和 WebRTC),以免因逾時而關閉這些連線。在這些情況下,系統仍會套用每秒執行一次計時器的規則。
請注意,這個機制採用的是實際時間,而非 CPU 作業時間。 這可有效估算 CPU 時間,並會針對長時間阻斷主執行緒的行為加以懲罰。
最後,請記住,如果您在背景使用長時間工作,應用程式可能會在很長的一段時間內受到節流 (最長可達工作時間的 100 倍)。依據效能規範,將工作分割成 50 毫秒以下的區塊,並使用 visibilityChange
事件監聽器,避免在背景執行不必要的工作。
選擇不採用
Chrome 提供 --disable-background-timer-throttling
標記,可用於執行測試套件和其他使用者核准的大量運算等用途。