Chrome 拡張機能開発マニュアル・Extension Service Worker のライフサイクル

> Extension Service Worker のライフサイクル

Service Worker のライフサイクルの延長

2023年5月2日(火)発行・2023年6月27日(火)更新 2023年5
月2日(火)発行・2023年6月27日(火)更新

目次 目次

  • インストール インストール方法
    • ServiceWorkerRegistration.install
    • chrome.runtime.onインストール済み
    • ServiceWorkerRegistration.active
  • 拡張機能の起動 拡張機能の起動
  • アイドル状態とシャットダウン アイドル状態とシャットダウン
    • グローバル変数を使用する代わりに
      データを保持するグローバル変数を使用する代わりにデータを保持する
    • Chrome の最小バージョンを選択してください
      Chrome の最小バージョンを選択してください

拡張サービス ワーカーは、標準のサービス ワーカー イベントと拡張名前空間のイベントの両方に応答します。拡張サービスの使用中に、あるタイプの後に別のタイプが続くことが多いため、これらは一緒に表示されます。拡張サービス ワーカーは、標準のサービス ワーカー イベントと拡張名前空間のイベントの両方に応答します。
.イベント。通常、拡張機能の使用中に一方のタイプがもう一方のタイプに従うため、これらはまとめられます。

# インストール インストール方法

インストールは、ユーザーがchrome://extensionsページを使用してアンパックされた拡張機能をロードまたは更新するときに発生します。次の順序で 3 つのイベントが発生します。Chrome ウェブストアから Service Worker をインストールまたは更新するとき、または
3 つのイベントは次の順序で発生します。

# ServiceWorkerRegistration.install

インストール中に発生する最初のイベントは、Web サービス ワーカーのインストール イベントです

# chrome.runtime.onInstalled

次は拡張機能onInstalledイベントで、拡張機能 (Service Worker ではない) が最初にインストールされたとき、拡張機能が新しいバージョンに更新されたとき、Chrome が新しいバージョンに更新されたときに発生します。このイベントを使用して状態を設定するか、コンテキスト メニューなどの 1 回限りの初期化用です。
次に、拡張機能のイベントです。これらのイベントは、拡張機能 (Service Worker ではなく) が最初にインストールされたとき、拡張機能が新しいバージョンに更新されたとき、および Chrome が次のバージョンに更新されたときに発生します。新しいバージョンのイベント。このイベントを使用して、状態を設定したり、コンテキスト メニューなどの 1 回限りの初期化を実行したりできます。

chrome.runtime.onInstalled.addListener(() => {  
  chrome.contextMenus.create({  
    "id": "sampleContextMenu",  
    "title": "Sample Context Menu",  
    "contexts": ["selection"]  
  });  
});

# ServiceWorkerRegistration.active


最後に、Service Worker activateイベントが発生します。Web Service Worker とは異なり、拡張機能にはページのリロードに相当するものがないため、このイベントは拡張機能のインストール直後に発生することに注意してください。Web サービス ワーカー スレッドとは異なり、拡張機能にはページのリロードと比較するものが何もないため、このイベントは拡張機能がインストールされた直後に発生することに注意してください。

# 拡張機能の起動 拡張機能の起動

ユーザー プロファイルが開始されると、

chrome.runtime.onStartup

イベントは発生しますが、Service Worker イベントは呼び出されません。
ユーザー プロファイルが開始されると、イベントは発生しますが、Service Worker イベントは呼び出されません。

# アイドル状態とシャットダウン アイドル状態とシャットダウン

通常、Chrome は次の条件のいずれかが満たされると Service Worker を終了します。
通常、Chrome は次の条件のいずれかが満たされると Service Worker を終了します。

  • 非アクティブ状態が 30 秒続くと、イベントを受信するか拡張機能 API を呼び出すと、このタイマーがリセットされます
    イベントを受信するか、拡張 API を呼び出すと、このタイマーはリセットされます。
  • イベントや API 呼び出しなどの 1 つのリクエストの処理に 5 分を超える場合
    イベントや API 呼び出しなどの 1 つのリクエストの処理に 5 分を超える場合
  • fetch() 応答の到着に 30 秒以上かかる場合
    fetch() 応答の到着には 30 秒以上かかります。

イベントと拡張 API の呼び出しによってこれらのタイマーがリセットされ、Service Worker が休止状態になった場合は、受信イベントによってタイマーが復活します。それでも、予期せぬ終了に対して回復力を持つように Service Worker を設計する必要があります。これらのタイマーを設定し、Service Worker が停止した場合
スリープ状態になると、受信イベントによって再開されます。ただし、予期しない終了に耐えられるようにサービス ワーカーを設計する必要があります。

拡張機能のリソース消費を最適化するには、可能な限り Service Worker を無期限に生存させないようにしてください。拡張機能をテストして、意図せずにこれが行われていないことを確認してください。拡張機能のリソース消費を最適化するには、可能であれば Service Worker を無期限に生存させないようにしてください
。州。拡張機能をテストして、これが誤って行われていないことを確認してください。

# グローバル変数を使用するのではなくデータを永続化する

グローバル変数を使用する代わりにデータを永続化する

Service Worker がシャットダウンすると、設定したグローバル変数はすべて失われます。グローバル変数を使用する代わりに、値をストレージに保存します。オプションは以下にリストされています。Web Storage API は拡張サービス ワーカーでは使用できないことに注意してください
。設定したグローバル変数は失われます。グローバル変数を使用せず、値をストレージに保存します。オプションは以下にリストされています。Web Storage API は拡張サービス ワーカーでは機能しないことに注意してください。

chrome.storage API chrome.storage API

複数のタイプのストレージ (ローカル、セッション、マネージド (ドメイン)、および同期) を提供する拡張 API。この API は、開発者定義のキーで識別および取得された JSON オブジェクトを保存します。このタイプのストレージは、ユーザーが Web をクリアしても削除されませんキャッシュ:
ローカル、セッション、ホスト (ドメイン)、同期などの複数のストレージ タイプに拡張 API を提供します。この API は、開発者定義のキーを使用して識別および取得される JSON オブジェクトを保存します。このタイプのストレージは、ユーザーが Web キャッシュをクリアしても削除されません。

IndexedDB API IndexedDB API

ファイルや BLOB などの構造化データのクライアント側ストレージ用の低レベル API。この API は、トランザクション データ ストレージと取得を作成するためのプリミティブを提供します。この API は単純なユースケースには複雑すぎることがよくありますが、多くのサードパーティ ストレージ
ファイルや BLOB などの構造化データをクライアント側で保存するための低レベル API。この API は、トランザクション データのストレージと取得を作成するためのプリミティブを提供します。この API は単純なユースケースには複雑すぎることがよくありますが、多くのサードパーティのストレージ ソリューションはこの API 上に構築されています。

キャッシュストレージ API キャッシュストレージ API

リクエスト オブジェクトとレスポンス オブジェクトのペアの永続ストレージ メカニズム。この API は Web サービス ワーカー向けに特別に設計されており、エンドポイントからデータを取得するために使用されます。この API は、ユーザーにとって重要かどうか、またその程度に応じてさまざまな使用方法があります。最新のデータを参照してください。詳細については、「オフライン クックブック」を参照してください。特にフェッチ ハンドラーを介してネットワーク リクエストをプロキシしている場合を除き、リクエスト オブジェクトと応答オブジェクトのペアには永続ストレージ メカニズムを使用する必要がありますchrome.storage
この API は、Web サービス ワーカーがエンドポイントからデータを取得するために特別に設計されています。この API を使用するには、ユーザーが最新のデータを表示するかどうか、および最新のデータを表示することがどの程度重要であるかに応じて複数の方法があります。詳細については、「オフライン レシピ」を参照してください。フェッチ ハンドラーを通じてネットワーク リクエストをプロキシしている場合を除き、 を使用する必要があります。

# Chrome の最小バージョンを選択します

最も低い Chrome バージョンを選択してください

Manifest V3 のリリース以来、Service Worker のライフタイムにいくつかの改善が加えられました。つまり、Manifest V3 拡張機能が以前のバージョンの Chrome をサポートしている場合は、注意する必要がある条件があります。これらの条件が拡張機能に影響しない場合は、このセクションから先に進むことができます。その場合は、マニフェストで Chrome の最小バージョンを指定することを検討してください。ManifestV3 の
リリース以来、Service Worker のライフサイクルにいくつかの改善が加えられました。これは、Manifest V3 拡張機能が以前のバージョンの Chrome をサポートしている場合、注意すべき条件がいくつかあることを意味します。これらの状況が拡張機能に影響しない場合は、このセクションから続行できます。その場合は、マニフェストで Chrome の最小バージョンを指定することを検討してください。

#クロム 116 クロム 116

Chrome 116 では、次の Service Worker ライフタイムの改善が導入されました:
Chrome 116 では、次の Service Worker ライフタイムの改善が導入されました。

  • アクティブなWebSocket接続により、拡張サービス ワーカーのライフタイムが延長されるようになりました。拡張サービス ワーカー内でメッセージを送受信すると、WebSocketサービス ワーカーのアイドル タイマーがリセットされます。
    アクティブな接続により、拡張サービス ワーカーのライフタイムが延長されるようになりました。拡張 Service Worker プロセスでメッセージを送信または受信すると、Service Worker プロセスのアイドル タイマーがリセットされます。

  • 追加の拡張機能 API は、拡張機能サービス ワーカーの 5 分間のタイムアウト期間を超えても許可されます。これらの API はユーザー プロンプトを表示するため、解決までに 5 分以上かかる場合があります。これらには以下が含まれます

    desktopCapture.chooseDesktopMedia()
    

    identity.launchWebAuthFlow()
    

    management.uninstall()
    

    、 そして

    permissions.request()
    

    拡張サービス ワーカーの場合
    、5 分のタイムアウトを超えても追加の拡張 API が許可されます。これらの API はユーザー プロンプトを表示するため、解決までに 5 分以上かかる場合があります。、、、を含む。

#Chrome114 クロム114


長期メッセージングを使用してメッセージを送信すると、Service Worker は生きたままになります。以前は、ポートを開くとタイマーがリセットされましたが、メッセージを送信してもリセットされませんでした。ポートを開いてもタイマーはリセットされなくなりました。以前は、ポートを開くとタイマーがリセットされましたが、メッセージを送信するとタイマーはリセットされませんでした。ポートを開いてもタイマーがリセットされなくなりました。

#Chrome110 クロム110

拡張 API 呼び出しによりタイマーがリセットされます。これまでは、イベント ハンドラーを実行するだけでサービス ワーカーが維持されていました。キューに入れられたものの、ハンドラーが呼び出されなかったイベントはリセットを引き起こしませんでした
以前は、Service Worker はイベント ハンドラーを実行することによってのみ存続し続けることができました。ハンドラーがまだ呼び出されていないキューに入れられたイベントはリセットを引き起こしません。

#クロム 109 クロム 109

オフスクリーン ドキュメントから送信されたメッセージはタイマーをリセットします。
オフスクリーン ドキュメントから送信されたメッセージはタイマーをリセットします。

#Chrome105 クロム105

を使用してネイティブ メッセージング ホストに接続する

chrome.runtime.connectNative()

サービスワーカーを生かし続けることになります。ホスト プロセスがクラッシュするかシャットダウンすると、ポートが閉じられ、タイマーが完了した後に Service Worker が終了します。電話してこれを防ぐ

chrome.runtime.connectNative()

ポートの onDisconnect イベント ハンドラー。
ネイティブ メッセージング ホストへの接続を使用すると、Service Worker が生きたままになります。ホスト プロセスがクラッシュするかシャットダウンすると、ポートが閉じられ、タイマーの期限が切れた後に Service Worker スレッドが終了します。これを防ぐには、ポートの onDisconnect イベント ハンドラーを呼び出します。

2023 年 6 月 27 日火曜日更新 · 記事を改善
2023 年 6 月 27 日火曜日更新 · 記事を改善

おすすめ

転載: blog.csdn.net/qq_35606400/article/details/132061805