サービスワーカーについて
サービスワーカーとは
サービスワーカーのライフタイム

ServiceWorkerで定義されているイベントか拡張機能で定義されたイベントを受け取ると起動して実行します。しばらくすると自動で休止する。
サービスワーカーは普段は停止状態のままで待機し、イベントを受け取ったときだけ起動し、しばらくするとタイムアウトして再び休止状態に戻ります。サービスワーカーが休止すると、内部で定義されている変数は消えてしまいます。そのため値を永続化させたい場合はその都度、chrome.storageやindexdDBを使う必要があります。
サービスワーカーが起動する条件
- 拡張機能を再度読み込む
 - 拡張機能
 
サービスワーカーが休止する条件
サービスワーカーは意図的に短いライフサイクルで動いています。
- 約30秒間イベントを受け取らなかったとき
 - イベントやAPI呼び出しなど、1つのリクエストで処理時間が5分以上続いたとき
 - 
fetch()のレスポンスが30秒経っても帰ってこないとき
https://developer.chrome.com/docs/extensions/mv3/service_workers/service-worker-lifecycle/#idle-shutdown 
約30秒というように時間をぼかしているのは、ブラウザや環境によって休止するまでの時間が異なるからです。正確な時間はドキュメントにも書かれていません。しかし多くの場合30秒前後で止まります。
通常の拡張機能では30秒経過したから自動休止する状況が多いでしょう。なぜ自動で休止するかというと、バッテリーやリソースを効率的に使うためです。(詳しい理由は、V3移行マニュアルに書いてありそう。サービスワーカーが導入されたのがv3からなので、もう少し意図が詳しく書いてありそうhttps://developer.chrome.com/docs/extensions/migrating/to-service-workers/#convert-timers)
ワーカーとは何か
ワーカーはインターフェースで、そこから派生するサービスワーカー、sharedworker と派生する
DOMを直接いじれないのや、windowオブジェクトで使えないメソッドがあるのはワーカーの仕様。
サービスワーカーの使うタイミング
- バックグラウンドのデータ同期
 - プッシュ通知
 
サービスワーカーを長く起動させたいとき
多くの拡張機能ではサービスワーカーの起動時間は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を投げて、ずっと起動させておく力技もあった。これがいちばん単純で強力だ。
ブラウザで提供されているサービスワーカーのライフサイクルはinstallとactivateの2つだがソース、chromeのドキュメントでは独自のインストール、アクティブ、Startup、idle&shutdown が書いてある。