terminate service worker

ワーカーの終了 (Web)

仕様書

閉じ中フラグ

[203] WorkerGlobalScope オブジェクトは、 閉じ中 (closing) フラグを持ちます。 初期状態はです。 >>202

タスクをキューに追加タスクキューへの追加の発生時に参照されます。

[45] WorkerGlobalScope インターフェイスclose メソッドは、次のようにしなければなりません >>44

  1. [99] 原子的に:
    1. [46] 文脈オブジェクトイベントループタスクキュータスクをすべて捨てます。
    2. [47] 文脈オブジェクトclosing flagに設定します。

ワーカーの終了

[96] Worker インターフェイスterminate メソッドは、 関連付けられたワーカーについてワーカーを停止しなければなりません >>95

[97] SharedWorker にはありません。

[88] ワーカーを停止 (terminate a worker) するには、 並列に次のようにしなければなりません >>78

  1. [89] ワーカーWorkerGlobalScopeclosing flagに設定します。
  2. [90] ワーカーWorkerGlobalScopeイベントループタスクキュータスクをすべて捨てます。
  3. [91] ワーカーで動作中のスクリプトについて、 走っているスクリプトの実行中断を実行します。
  4. [92] ワーカーWorkerGlobalScopeDedicatedWorkerGlobalScope なら、 ワーカー暗示的なポートentangle されている port message queue を空にします。

[94] run a worker のメインのスクリプトimportScriptsスクリプトが実行停止されることがあります。 その他のスクリプトも (明記されていませんが) 停止するはずです。

[73] ワーカーを走らせる処理の最後のワーカーの終了の段階は、 内側設定群ワーカー大域適用範囲を次のようにしなければなりません >>48

  1. [74] 内側設定群活性タイマーのリストを空にします。
  2. [75] ワーカー大域適用範囲ポート群の各ポートについて、
    1. [201] ポートdisentangle を実行します。
  3. [76] ワーカー大域適用範囲所有子集合にします。

[40] Blob URL Store 内の Blob URL は (暗黙に) 破棄されると思われます。

[7] ワーカーを走らせる処理から呼び出されます。

[87] 利用者エージェントは、ワーカーclosing flagに設定されてもなお走り続けている場合で、 active needed worker でなくなった時、 ワーカーを停止させても構いません。 >>78

[111] WorkerSharedWorker への参照を破棄すると、そのワーカースクリプトからアクセスする手段がなくなるかもしれません。 仕様書上は、それによってワーカーが破棄されるわけではありません。 しかし実際には GC により破棄されるようです >>21。 (著者スクリプトから観測できない実装の最適化といえるものなので、 仕様書上には現れません。)

サービスワーカーの終端

[8] サービスワーカーを終端 (terminate service worker) させるには、 サービスワーカーワーカーを次のようにします >>5

  1. [9] ワーカー走っているの場合、
    1. [10] ここで停止します。
  2. [11] 大域適用範囲を、ワーカー大域オブジェクトに設定します。
  3. [12] 大域適用範囲閉じ中フラグを、に設定します。
  4. [13] ワーカーset of extended eventsにします。
  5. [16] 大域適用範囲イベントループタスクキュー群の各タスクキューについて、
    1. [14] タスクを、タスクキューdequeue した結果に設定します。
    2. [19] タスクnull 以外なら、
      1. [17] タスクタスク源handle fetch task source または handle functional event task source なら、
        1. [18] タスクをキューに追加します。
          タスク
          タスク
          タスク源
          タスクタスク源
          タスクキュー
          ワーカーcontaining service worker registrationタスクキュー群タスクキューに相当するタスクキュー
  6. [15] ワーカーで動作中のスクリプトについて、 走っているスクリプトの実行中断を実行します。

[4] 実行中の handle fetchInstall を失敗させることになる場合があります。

文脈

[2] 利用者エージェントは、処理するイベントがなくなったとき、 サービスワーカーを終端させて構いません。 >>1

[3] 利用者エージェントは、無限ループや割当時間超過など、 異常を検知したとき、イベントの処理中であってもサービスワーカーを終端させて構いません。 >>1

[24] Install から呼び出されることがあります。

歴史

[6] ワーカーの歴史も参照。

[20] Editorial: restructure ownership of workers to parent-owners (annevk著, ) <https://github.com/whatwg/html/commit/59a4750f475acd789ee436b4906972ba2081d8b3>

ワーカーを殺す

[84] 利用者エージェントは、いつでもワーカーを殺す処理を実行して構いません。 例えば次の時に実行できます。 >>77

[79] ワーカーを殺す (kill a worker) には、 並列に次のようにしなければなりません >>77

  1. [80] ワーカーWorkerGlobalScopeclosing flagに設定します。
  2. [81] ワーカーWorkerGlobalScopeイベントループタスクキュータスクをすべて捨てます。
  3. [82] 利用者エージェント定義の時間、待ちます。
  4. [83] ワーカーで動作中のスクリプトについて、 走っているスクリプトの実行中断を実行します。

[93] run a worker のメインのスクリプトimportScriptsスクリプトが実行停止されることがあります。 その他のスクリプトも (明記されていませんが) 停止するはずです。

[21] Remove overly permissive "kill a worker" algorithm (annevk著, ) <https://github.com/whatwg/html/commit/77c694e25adabfc5706b5885fbcc1b0d3d5c4416>

[22] The WHATWG Blog — HTML and shared memory () <https://blog.whatwg.org/html-and-shared-memory>

[23] Meta: export WorkerGlobalScope "closing" dfn (jugglinmike著, ) <https://github.com/whatwg/html/commit/018547046496a8eed2a660544462589e1c7c4ff5>