-
Notifications
You must be signed in to change notification settings - Fork 4
/
575.txt
78 lines (62 loc) · 5.12 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
[2] [[イベント・ループ]]における処理の単位を[DFN[[RUBYB[タスク]@en[task]]]]といいます。
* 仕様書
[REFS[
- [1] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-03-28 21:58:58 +09:00]] 版) <http://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]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#the-event-loop>
]REFS]
* 分類
[3] [[タスク]]には次の種類があります [SRC[>>1]]。
- [5] [[イベント]]: 特定の [CODE(DOMi)@en[[[EventTarget]]]] において [CODE(DOMi)@en[[[Event]]]]
を[[非同期]]的に [[dispatch]] します。
-- [6] なお、[[タスク]]として[[非同期]]的に実行される[[イベント]]だけでなく、
他の[[タスク]]の中で[[同期]]的に実行されるものもあります。
- [7] [[構文解析]]: [[構文解析器]]が[[バイト]]列を[[字句]]化して処理します。
- [8] [[コールバック]]: [[コールバック]]を[[非同期]]的に呼び出します。
- [9] [[資源]]の利用: [[fetch]] 操作において[[非同期]]的に [[fetch]] が行われる時、
[[資源]]が利用可能になった時にその処理を行います。
- [10] [[DOM]] 操作の反応: [[要素]]によっては [[DOM]] 操作によって引き起こされる処理があります。
[20] また、[[タスク]]はそれぞれの[[タスク源]]に属しており、
それに応じて追加される[[タスク・キュー]]が決定されます。
* 状態
[11] [[タスク]]は、次の状態を持ちます。
[FIG(list members)[
: [F[イベントループ]] : [[タスク]]が属する[[イベントループ]]です。
: [F[タスク源]] : [[タスク]]が属する[[タスク源]]です。
: [F[文書]] : [[閲覧文脈]]の[F[イベントループ]]の[[タスク]]の場合、
[[タスク]]が属する[[文書]]です。本[[文書]]が[F[完全に活性]]な時に[[タスク]]は実行できます。
[[ポートメッセージキュー]]の[[タスク]]においては、
[CODE(DOMi)@en[MessagePort]] が [[transfer]] される際に、
書き換えられることがあります。
: [F[fetch]] :[[fetch]] が生成した[[タスク]]の場合、生成元の [[fetch]] です。
[[タスク]]の削除に用いられます。
: [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[処理]] :[[タスク]]が実行するべき処理の種類と必要な[[引数]]です。
]FIG]
* 歴史
[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]] の後の[[非同期]]な処理などは、[[安定状態]]に処理を再開するものとされています。
[22] [[タスク]]は[[文書]]に関連付けられています。[[タスク]]がある[[要素]]に関して追加されたなら、
その[[要素]]の[[文書]]が当該[[タスク]]の[[文書]]です。また[[タスク]]がある[[閲覧文脈]]に関して追加されたなら、
その[[閲覧文脈]]の[[活性文書]]が当該[[タスク]]の[[文書]]です。
[[スクリプト]]により、あるいは[[スクリプト]]のために追加された[[タスク]]については、
その[[スクリプト]]の[[スクリプトの文書]]が[[タスク]]の[[文書]]です。 [SRC[>>1]]
[23] [[タスク]]は特定の[[イベント・ループ]]により処理されることを意図したものです。
[[タスク]]に関連付けられた[[文書]]についての[[タスク]]を処理する[[イベント・ループ]]が1つあって、
その[[文書]]の[[タスク]]はすべてその[[イベント・ループ]]で処理されます。 [SRC[>>1]]
[24] [[タスク]]とは別に[[マイクロタスク]]もあります。
かつては完全に別物として定義されていましたが、
現在では[[マイクロタスク]]が[[タスク]]として[[タスクキューに追加]]されることもあります。