更長的擴充功能服務工作站生命週期

現在,只要擴充功能服務工作處理程序能夠收到活動,就能繼續保持運作。這會提高擴充功能服務工作站的可靠性,但會產生應避免的錯誤。

Joe Medley
Joe Medley

從 Chrome 110 (自 2023 年 2 月 7 日開始推出 Beta 版) 後,只要擴充功能服務工作處理程序持續收到活動,擴充功能服務工作處理程序就會保持有效狀態。修正先前實作擴充功能 Service Worker 的時間問題。當新事件位於事件佇列中時,可能會發生逾時,以及截斷非同步工作時發生的逾時。這項改進讓擴充服務工作人員省去硬性五分鐘的最長生命週期。

本文將說明這些行為的異動。

背景

擴充功能 Service Worker 主要的運作方式與網路服務工作站相同,但除了服務工作站事件外,擴充功能服務工作處理程序也可以監聽擴充功能事件。雖然一般 Service Worker 事件會延長 Service Worker 的生命週期,但在發布 110 之前,只有幾項擴充功能平台事件可讓擴充功能 Service Worker 保持運作。

一般來說,只要滿足下列任一條件,Chromium 就會終止 Service Worker:

  • Service Worker 已有超過 30 秒未收到事件,也沒有執行中的長時間執行工作。如果服務工作人員在這段期間內收到事件,系統會移除閒置計時器。
  • 長時間執行的工作完成時間超過 5 分鐘,且過去三十秒未收到任何事件。

在閒置計時器或長時間執行的工作計時器到期前收到的新 Service Worker 事件,會重設計時器並延長服務工作處理程序的生命週期。

很抱歉,這個行為不適用於擴充功能事件。擴充功能事件可喚醒擴充功能 Service Worker,並保持運作直到事件完成為止,但無法延長 30 秒的閒置計時器。這實際上意味著,即使瀏覽器剛剛將新事件分派給擴充功能,擴充功能 Service Worker 在最後一個擴充功能事件完成之後隨時都可以終止。

異動情形

自 Chrome 110 起,如果還有待處理事件,所有事件都會重設閒置計時器,且不會發生閒置逾時。換句話說,假設沒有意外中斷,只要擴充功能服務工作處理程序正在積極處理,通常就會維持運作。此外,呼叫擴充功能特定 Chrome API (例如 chrome.storage.local.get()) 時,也會重設閒置逾時。詳細說明:

  • Service Worker 會在閒置 30 秒後終止。(接收事件或呼叫擴充功能 API 會重設這個計時器)。
  • 如果單一要求 (例如事件或 API 呼叫) 的處理時間超過 5 分鐘,Service Worker 就會終止。

部分 API (例如原生訊息傳遞) 提供強大的保持運作機制,可以取消這兩個計時器。

我們仍在努力確保擴充功能服務工作處理程序在可能的情況下終止,而不關閉長時間執行的工作。因資源考量的擴充服務工作處理程序應盡可能地產生可用。此外,擴充功能必須保留狀態,為意外終止的情況做好準備。這可以預防無法預測的事件 (例如使用者強制關閉瀏覽器)。

相片來源:Paula GuerreeroUnsplash 網站上