Open5

サービスワーカーについて

ひげひげ

サービスワーカーのライフタイム

ServiceWorkerで定義されているイベントか拡張機能で定義されたイベントを受け取ると起動して実行します。しばらくすると自動で休止する。
サービスワーカーは普段は停止状態のままで待機し、イベントを受け取ったときだけ起動し、しばらくするとタイムアウトして再び休止状態に戻ります。サービスワーカーが休止すると、内部で定義されている変数は消えてしまいます。そのため値を永続化させたい場合はその都度、chrome.storageindexdDBを使う必要があります。

https://stackoverflow.com/questions/29741922/prevent-service-worker-from-automatically-stopping/29750936#29750936

サービスワーカーが起動する条件

  • 拡張機能を再度読み込む
  • 拡張機能

サービスワーカーが休止する条件

サービスワーカーは意図的に短いライフサイクルで動いています。

約30秒というように時間をぼかしているのは、ブラウザや環境によって休止するまでの時間が異なるからです。正確な時間はドキュメントにも書かれていません。しかし多くの場合30秒前後で止まります。

通常の拡張機能では30秒経過したから自動休止する状況が多いでしょう。なぜ自動で休止するかというと、バッテリーやリソースを効率的に使うためです。(詳しい理由は、V3移行マニュアルに書いてありそう。サービスワーカーが導入されたのがv3からなので、もう少し意図が詳しく書いてありそうhttps://developer.chrome.com/docs/extensions/migrating/to-service-workers/#convert-timers

ひげひげ

ワーカーとは何か

ワーカーはインターフェースで、そこから派生するサービスワーカー、sharedworker と派生する
DOMを直接いじれないのや、windowオブジェクトで使えないメソッドがあるのはワーカーの仕様。
https://developer.mozilla.org/ja/docs/Web/API/Web_Workers_API/Using_web_workers
https://ascii.jp/elem/000/004/062/4062046/
https://numb86-tech.hatenablog.com/entry/2021/05/18/214946
https://developer.mozilla.org/ja/docs/Web/API/Service_Worker_API

ひげひげ

サービスワーカーの使うタイミング

  • バックグラウンドのデータ同期
  • プッシュ通知
ひげひげ

サービスワーカーを長く起動させたいとき

多くの拡張機能ではサービスワーカーの起動時間は30秒で十分なのですが、それより長く起動させておく方法がいくつかあります。

https://developer.chrome.com/docs/extensions/mv3/service_workers/service-worker-lifecycle/#timeouts

いろんな方法が書かれてある。offscreenを使ったテクニックが簡潔
https://stackoverflow.com/questions/66618136/persistent-service-worker-in-chrome-extension

setIntervalで無意味なfetchを投げて、ずっと起動させておく力技もあった。これがいちばん単純で強力だ。
https://stackoverflow.com/a/68552150

ブラウザで提供されているサービスワーカーのライフサイクルはinstallとactivateの2つだがソース、chromeのドキュメントでは独自のインストール、アクティブ、Startup、idle&shutdown が書いてある。

https://developer.chrome.com/docs/extensions/mv3/service_workers/service-worker-lifecycle/#idle-shutdown