equivalent

ジョブ (サービスワーカー)

仕様書

ジョブ

[2] ジョブ (job) は、 サービスワーカー登録への要求を表します >>1。

[29] ジョブは実行オプションの集合体のようなもので、 実行はタスクとしてイベントループ内で行われます。

状態

[3] ジョブは、次の状態を持ちます。

ジョブ型 (job type)
登録, 更新, 登録解除のいずれか >>1。
スクリプトURL
ワーカー型
キャッシュ利用
クライアント
参照元
ジョブ約束
約束または null。初期値は null。
等価ジョブ群のリスト (list of equivalent jobs)
ジョブのリスト。初期値は空リスト。 >>1
force bypass cache flag

等価性

[4] ジョブが等価 (equivalent) であるとは、 次の条件をすべて満たすことをいいます >>1。

作成

[12] ジョブ作成 (Create Job) は、 ジョブ型、 適用範囲URL、 スクリプトURL、 約束、 クライアントを次のようにします >>1。

  1. [13] ジョブを、新しいジョブに設定します。
    ジョブ型
    ジョブ型
    適用範囲URL
    適用範囲URL
    スクリプトURL
    スクリプトURL
    ジョブ約束
    約束
    クライアント
    クライアント
  2. [15] クライアントが null でない場合、
    1. [16] ジョブの参照元を、クライアントの作成URLに設定します。
  3. [14] ジョブを返します。

[17] 次の場面で呼び出されます。

ジョブ約束

[41] ジョブは、 ジョブ約束 (job promise) を持ちます。 値は約束または nullで、初期値は null です。 >>1

[42] ジョブ約束の解決 (Resolve Job Promise) やジョブ約束の拒絶 (Reject Job Promise) は、 ジョブと値について、次のようにします >>1。

  1. [44] ジョブの処理を実行します。
  2. [45] ジョブの等価ジョブ群のリストの各ジョブについて、
    1. [46] ジョブの処理を実行します。

[47] ジョブの処理は、次のようにします >>1。

  1. [43] ジョブのクライアントが null 以外の場合、
    1. [48] タスクをキューに追加します。
      処理
      1. [49] ジョブのジョブ約束を、値で解決 (ジョブ約束の解決の場合。) または拒絶 (ジョブ約束の拒絶の場合。) します。
      イベントループ
      ジョブのクライアントの有責イベントループ
      タスク源
      DOM操作タスク源

[50] 次の場面で呼び出されます。

ジョブキュー

[9] ジョブキュー (job queue) は、 ジョブを順に実行するためのスレッド安全なキューです。 >>1

[10] FIFO キューの一般的な特性を満たすべきです。 >>1

[11] 利用者エージェントは、 適用範囲URLからジョブキューへの写像を持ちます。 >>1

スケジューリング

[18] Schedule Job は、 ジョブキューとジョブについて、次のようにします >>1。

  1. [19] ジョブキューが空の場合、
    1. [20] ジョブをジョブキューに push します。
    2. [21] ジョブキューについてジョブを走らせる処理を実行します。
  2. [22] それ以外の場合、
    1. [23] 最後のジョブを、ジョブキューの末尾の項目に設定します。
    2. [24] ジョブが最後のジョブと等価で、 最後のジョブのジョブ約束が settle 済みでない場合、
      1. [25] ジョブを最後のジョブの等価ジョブ群のリストに append します。
    3. [26] それ以外の場合、
      1. [27] ジョブをジョブキューに push します。

[28] 次の場面で呼び出されます。

実行

[30] ジョブを走らせる (Run Job) には、 ジョブキューについて、次のようにします >>1。

  1. [31] タスクをキューに追加します。
    処理
    1. [32] ジョブを、ジョブキューの先頭の項目に設定します。
    2. [33] 並列に、ジョブの処理を実行します。
    タスク源
    ?
[34] 注記として登録や更新のタスクをキューに追加するのは DOMContentLoaded まで遅延する >>1 とありますが、 そのような規定は見当たりません。

[51] ジョブの実行とは、ジョブ型により、 ジョブとジョブキューについて登録、 更新、登録解除の適切なものを実行することをいいます >>1。

[39] ジョブを走らせる処理は、Schedule Job とジョブ終了から呼び出されます。


[35] ジョブ終了 (Finish Job) は、 ジョブとジョブキューについて、 次のようにします >>1。

  1. [36] ジョブキューから先頭の項目を pop します。
  2. [37] ジョブキューが空でない場合、
    1. [38] ジョブキューのジョブを走らせる処理を実行します。

[40] 次の場面で呼び出されます。