-
Notifications
You must be signed in to change notification settings - Fork 4
/
575.txt
93 lines (73 loc) · 5.08 KB
/
575.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
[2] [[イベントループ]]における処理の単位を[DFN[[RUBYB[タスク]@en[task]]]]といいます。
* 仕様書
[REFS[
- [12] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2016-12-06 07:17:59 +09:00]]) <https://html.spec.whatwg.org/#event-loops>
-- [1] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-03-28 21:58:58 +09:00]] 版) <https://www.whatwg.org/specs/web-apps/current-work/#task-queue>'''
-- [19] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-03-28 21:58:58 +09:00]] 版) <https://www.whatwg.org/specs/web-apps/current-work/#the-event-loop>
]REFS]
* 意味
[3] [DFN[[RUBYB[[[タスク]]]@en[task]]]]は、
[[イベント]]の[[ディスパッチ]]、
[[構文解析]]、
[[コールバック]]の呼び出し、
[[fetch]] 結果の処理、
[[DOM]] 操作に対する反応といった、
色々な作業を担当する[[アルゴリズム]]です [SRC[>>1]]。
* 文脈
[5] [[Webブラウザー]]の大部分の処理は、[[タスク]] (の集合) として定義されています。
[7] [[タスク]]の[[キュー]]として、次のものがあります。
[FIG(list middle)[
- [[タスクキュー]]
- [[セッション履歴探索キュー]]
- [[マイクロタスクキュー]]
- [[ポートメッセージキュー]]
- [[未出荷済みポートメッセージキュー]]
- [[pending application cache download process tasks]]
]FIG]
[8] [[フォーム]]は [F[planned navigation]] として[[タスク]]を持つことがあります。
* 状態
[11] [[タスク]]は、次の状態を持ちます。
[FIG(list members)[
: [F[処理]] :
[[アルゴリズム]]と[[引数]]の集合。
: [F[[[triggered by user activation]] な[[タスク]]かどうか]] :
: [F[triggered by a user generated orientation change]] :
: [F[[CODE(DOMe)@en[click]] [[イベント]]]] :
[CODE(DOMe)@en[click]] [[イベントオブジェクト]] (あれば)。
[[triggered by user activation]] や [CODE(JS)@en[window.open]] を参照。
: [F[タイマー入れ子水準]] : [[タイマー]]の入れ子の実行に関する制御のための変数です。
[[タイマー]]の[[タスク]]にのみ存在します。
: [F[タスク源]] :
[[タスク源]]。[[タスクキュー]]参照。
: [F[文書]] :
[[文書]]または [CODE[null]]。既定値は [CODE[null]]。[[タスクキュー]]参照。
: [F[fetch]] :
[[fetch]] または [CODE[null]]。既定値は [CODE[null]]。[[タスクキュー]]参照。
: [F[順序]] :
[[タスクキュー]]内での相互順序を表す値です。
[[未出荷済みポートメッセージキュー]]が絡む場合を除けば、[[タスクキュー]]内でのみ比較されます。
]FIG]
[6] [[タスク]]は、いずれかの[[イベントループ]]に ([[タスクキュー]]などに追加されることにより)
所属し、実行されるものです [SRC[>>1]]。基本的には作成された[[イベントループ]]に所属し、
他の[[イベントループ]]に移動することはありませんが、
[[ポートメッセージキュー]]の[[タスク]]のような例外もあります。
[9] 実装戦略によっては、[[タスク]]に他の最適化のための情報を付与する必要があるかもしれません。
例えば [[WebSocketメッセージの受信]]では、必要な [[I/O]] 処理のための[[資源]]が確保されるまで、
他の[[タスク]]を実行することが望ましいとされています。これの実現のためには、
[[イベントループ]]が[[タスクキュー]]から[[タスク]]を選んで実行するに当たり、
[[タスク]]がどのような[[資源]]を必要としており、それが直ちに利用可能であるか否かを判定しなければなりません。
* 歴史
[REFS[
- [21] [CITE@en[Web Applications 1.0 r7874 Try to clarify event loop terminology.]] ([TIME[2013-05-31 07:22:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=7873&to=7874>
]REFS]
* 関連
[4] [[タスク・キュー]]は、[[タスク]]の[[順序付き]]の[[リスト]]です [SRC[>>1]]。
[[タスク]]は[[タスク・キュー]]に追加されることによって順に実行されていきます。
[18] [[Webブラウザー]]における[[非同期]]な処理は、すべてが[[タスク]]として説明されているわけではありません。
[[資源]]の [[fetch]] の後の[[非同期]]な処理などは、[[安定状態]]に処理を再開するものとされています。
[23] [[タスク]]は特定の[[イベント・ループ]]により処理されることを意図したものです。
[[タスク]]に関連付けられた[[文書]]についての[[タスク]]を処理する[[イベント・ループ]]が1つあって、
その[[文書]]の[[タスク]]はすべてその[[イベント・ループ]]で処理されます。 [SRC[>>1]]
[24] [[タスク]]とは別に[[マイクロタスク]]もあります。
かつては完全に別物として定義されていましたが、
現在では[[マイクロタスク]]が[[タスク]]として[[タスクキューに追加]]されることもあります。