runnable

タスク (Web)

[2] イベントループにおける処理の単位をタスク (task) といいます。

仕様書

意味

[3] タスク (task) は、 イベントディスパッチ構文解析コールバックの呼び出し、 fetch 結果の処理、 DOM 操作に対する反応といった、 色々な作業を担当するアルゴリズムです >>1

文脈

[5] Webブラウザーの大部分の処理は、タスク (の集合) として定義されています。

[7] タスクキューとして、次のものがあります。

[8] フォームplanned navigation としてタスクを持つことがあります。

状態

[11] タスクは、構造体です >>1。 次の状態を持ちます。

[14] 手順群 (steps)
タスクが実施する仕事を指定する手順群の系列。 >>1
[15] 文書 (document)
window event loop なら、タスクに関連付けられた文書。 それ以外なら、 null>>1 タスクキュー

[16] かつてはワーカーに関連付けられることもあるとされていました >>13

スクリプト評価環境設定群オブジェクト集合
triggered by user activationタスクかどうか
triggered by a user generated orientation change
click イベント
click イベントオブジェクト (あれば)。 triggered by user activationwindow.open を参照。
タイマー入れ子水準
タイマーの入れ子の実行に関する制御のための変数です。 タイマータスクにのみ存在します。
fetch
fetch または null。既定値は nullタスクキュー参照。
順序
タスクキュー内での相互順序を表す値です。 未出荷済みポートメッセージキューが絡む場合を除けば、タスクキュー内でのみ比較されます。
捨てる処理
handle fetchタスクサービスワーカーを終端させる処理で捨てる時に使います。
[17] 走らせられる (runnable)
文書null か、 文書完全に活性>>1

[6] タスクは、いずれかのイベントループに (タスクキューなどに追加されることにより) 所属し、実行されるものです >>1。基本的には作成されたイベントループに所属し、 他のイベントループに移動することはありませんが、 ポートメッセージキュータスクのような例外もあります。

[9] 実装戦略によっては、タスクに他の最適化のための情報を付与する必要があるかもしれません。 例えば WebSocketメッセージの受信では、必要な I/O 処理のための資源が確保されるまで、 他のタスクを実行することが望ましいとされています。これの実現のためには、 イベントループタスクキューからタスクを選んで実行するに当たり、 タスクがどのような資源を必要としており、それが直ちに利用可能であるか否かを判定しなければなりません。

[20] タスクの一種にマイクロタスクがあります。 かつては名前の似た別物とされていたこともありますが、 今では、少なくても仕様書上は、 マイクロタスクタスクの一種とされています。 マイクロタスク マイクロタスクとそうでないタスクに構造的な違いはありません。 タスクマイクロタスクであるか否かによって生じる違いもありません。 (タスクキューに入れられるかマイクロタスクキューに入れられるかで、 実行タイミングが違うだけです。)

実行

イベントループ

関連

[4] タスク・キューは、タスク順序付きリストです >>1タスクタスク・キューに追加されることによって順に実行されていきます。

[18] Webブラウザーにおける非同期な処理は、すべてがタスクとして説明されているわけではありません。 資源fetch の後の非同期な処理などは、安定状態に処理を再開するものとされています。

[23] タスクは特定のイベント・ループにより処理されることを意図したものです。 タスクに関連付けられた文書についてのタスクを処理するイベント・ループが1つあって、 その文書タスクはすべてそのイベント・ループで処理されます。 >>1

歴史

[10] Integrate with the Long Tasks spec (npm1, , ) https://github.com/whatwg/html/commit/425a67ba81288305fce86736a0772f84c3f30eed

[13] Editorial: rigorize tasks and task queuing (domenic, , ) https://github.com/whatwg/html/commit/f4e29076caad1779336adea40ac2125d6d1c9496

[22] Add "queue an element task" algorithm (dtapuska, , ) https://github.com/whatwg/html/commit/a9e1d2ad5a7569010c685b271965ae4a3a34a64b