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

擴充功能服務工作站現在只要收到事件,就能繼續使用該工作。這樣可以提高擴充功能服務工作站的可靠性,但會有一些您應避免的陷阱。

喬梅利
Joe Medley

自 Chrome 110 (Beta 版) 起 (自 2023 年 2 月 7 日起推出 Beta 版),擴充功能服務工作人員只要收到事件,就會持續運作。這可修正先前實作的擴充功能服務 Worker 中的時間問題。新事件在事件佇列中時,可能會發生逾時,導致逾時以截斷非同步工作。這個改善項目能移除擴充功能 Service worker 硬性五分鐘的生命週期上限。

本文將說明這些行為的變化。

背景

擴充功能 Service 工作站的運作方式與網路服務工作站相同,但除了 Service Worker 事件外,擴充功能服務工作站也可以監聽擴充功能事件。一般的 Service Worker 事件會延長服務 Worker 的生命週期,但在發布 110 個擴充功能平台事件之前,只有少數幾個擴充功能平台事件仍保持運作。

一般而言,Chromium 會在符合下列任一條件後終止 Service Worker:

  • 服務工作處理程序已經超過 30 秒未收到事件,也沒有正在執行的長時間執行工作。如果 Service Worker 在這段期間內收到事件,系統就會移除閒置計時器。
  • 長時間執行的工作需花費超過 5 分鐘才能完成,且在過去三十秒內未收到任何事件。

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

很抱歉,這項行為不適用於擴充功能事件。擴充功能事件可能會喚醒擴充功能 Service Worker,並保持其運作直到事件完成為止,但無法延長 30 秒的閒置計時器。這實際上表示,即使瀏覽器才剛傳送新事件給擴充功能,擴充功能服務工作程式在上一個擴充功能事件完成後,也可能隨時終止。

異動情形

自 Chrome 110 版起,所有事件都會重設閒置計時器,若有待處理的事件,系統就不會顯示閒置逾時。換句話說,假設擴充功能服務工作中沒有意外中斷,只要擴充功能服務工作人員積極處理事件,通常就會保持運作狀態。此外,如果呼叫擴充功能專用的 Chrome API (例如 chrome.storage.local.get()),將重設閒置逾時。詳細說明:

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

有些 API (例如原生訊息傳遞) 提供強大的保持運作,讓兩個計時器都取消。

我們目前仍在設法確保擴充功能 Service 工作站盡可能終止,而不會關閉長時間執行的工作。資源具體的擴充功能服務工作站應盡可能產生結果。此外,擴充功能也應保持保留狀態,為非預期的終止作業做好準備。這可防止不可預測的事件發生,例如使用者遭到強制關閉瀏覽器。

相片來源:Paula GuerreiroUnsplash 網站上