-
Notifications
You must be signed in to change notification settings - Fork 4
/
574.txt
107 lines (81 loc) · 6.62 KB
/
574.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
[2] [DFN[[RUBYB[タスクキュー]@en[task queue]]]]は、[[イベントループ]]における[[タスク]]の[[順序付き]]の[[リスト]]です。
[SRC[>>1]]
* 仕様書
[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]
* 概要
[4] [[タスクキュー]]は[[タスク]]の[[キュー]]です。0個以上の[[タスク]]を入れたり出したりできます。[[キュー]]ですから原則として [[FIFO]] ですが、次に示す通り[[タスク]]が含まれるか否かに依存する動作があったり、先頭以外の[[タスク]]が削除されたりすることがあります。
[5] 一つの[[タスク]]が複数の[[タスクキュー]]に同時に含まれることはありません。
[7] 定義上[[タスクキュー]]とはされていませんが、実質的に[[タスクキュー]]の特殊形であるものとして、
[[セッション履歴探索キュー]]があります。
* 追加
[11] [[利用者エージェント]]が[DFN[[RUBYB[[[タスクをキューに追加]]]@en[queue a task]]]]するという時は、
関係する[[イベント・ループ]]の[[タスク・キュー]]のいずれかに当該[[タスク]]を追加し[['''なければなりません''']]。
同じ[[タスク源]]からの[[タスク]]は常に同じ[[タスク・キュー]]に追加しなければ[['''なりません''']]。
違う[[タスク源]]からの[[タスク]]は別の[[タスク・キュー]]に追加して[['''構いません''']]。
[SRC[>>1]]
[EG[
[12] 例えば、[[マウス]]や[[鍵盤]]の[[イベント]]のための[[タスク・キュー]]
([[利用者対話タスク源]]用[[タスク・キュー]]) とそれ以外用の[[タスク・キュー]]の2つを用意し、
[[マウス]]や[[鍵盤]]の方の[[タスク・キュー]]を優先的に処理することにすれば、
[[利用者]]の操作には反応を返すようにしつつ、それが無い時に他の処理を実行する、
というようにできます。 [SRC[>>1]]
]EG]
[13] [[タスク]]は、 [CODE(DOMi)@en[[[Document]]]] と関連付けられます
([[タスク]]の項を参照)。 [SRC[>>1]]
[20] [[closing]] [[フラグ]]が[[真]]に設定されている時は、
[[タスク]]が追加されようとしても捨てなければ[['''なりません''']]。 [SRC[>>19]]
;; [21] [[ワーカー]]が終了しようとしている時に発生した[[タイマー]]その他の[[タスク]]が捨てられることになります。
この[[フラグ]]は[[ワーカー]]にだけあり、本体の[[イベント・ループ]]では起こりません。
* 存在
[28] [CODE(DOMi)@en[[[EventSource]]]], [CODE(DOMi)@en[[[MessagePort]]]] の[[ごみ収集]]のタイミングは、
[[タスク]]が[[タスク・キュー]]に残っているかによって決まります。
;; [29] これは[[タスク]]から [CODE(DOMi)@en[[[EventSource]]]],
[CODE(DOMi)@en[[[MessagePort]]]] へ[[強い参照]]があると解釈できるかもしれません。
;; [30] [[XHR]] は逆に[[ごみ収集]]によって[[タスク]]を破棄します。
* 削除
[22] [[タスク]]は実行される際に[[キュー]]から削除されますが、それ以外にも削除されることがあります。
[FIG(list)[
- [23] 特定の [CODE(DOMi)@en[[[Document]]]] に関連付けられた[[タスク]]がすべて削除されることがあります。
-- [CODE(JS)@en[[[window.open]]]]
-- [[discard a [CODE(DOMi)@en[Document]]]]
- [24] 特定の[[タスク源]]の[[タスク]]がすべて削除されることがあります。
-- [[media element load algorithm]]
- [27] 特定の[[文書族]]・[[タスク源]]の[[タスク]]がすべて削除されることがあります。
-- [CODE(JS)@en[[[window.open]]]]
-- [[セッション履歴エントリーの挿入]]
- [26] 特定のものに関する [[fetch]] [[算法]]が生成した[[タスク]]がすべて削除されることがあります。
-- [[update the image data]]
-- [[媒体要素]]
-- [[text track]]
-- [[abort a document]]
-- [[XHR]] の[[ごみ収集]]
- [25] すべての[[タスク]]が削除されることがあります。
-- [CODE(DOMi)@en[[[WorkerGlobalScope]]]] の [CODE(DOMm)@en[[[close]]]]
-- [[kill a worker]]
-- [[XHR]]
-- [CODE(DOMi)@en[[[FileReader]]]] の [CODE(DOMm)@en[[[abort]]]]
-- [CODE(DOMi)@en[[[FileSaver]]]] の [CODE(DOMm)@en[[[abort]]]]
- [33] 特定の[[タスク]]が削除されることがあります。
-- [[planned navigation]]
--- [CITE@en[Web Applications 1.0 r7992 Make <form> submission more like reality.]] ([TIME[2013-06-20 06:37:00 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=7991&to=7992>
]FIG]
* 関連
[3] [[イベントループ]]は、1つ以上の[[タスクキュー]]を持ちます [SRC[>>1]]。
[31] [[イベントループ]]が複数存在する場合には、それぞれがそれぞれの[[タスクキュー]]を持ちます。
[32] [[タスク]]は原則として追加された順番に実行されていきますが、
未実行の[[タスク]]が入っていて実行待ちをしているのがこの[[タスクキュー]]です。
[[タスクキュー]]の個数は実装依存で、 [[Webブラウザー]]によって単一だったり、複数だったりします。
[[タスクキュー]]が複数あっても、同じ[[タスク源]]の[[タスク]]は同じ[[タスクキュー]]に入るので、
順序が保存されます。異なる[[タスク源]]の[[タスク]]の順序が保存されるかは実装依存です。
[34] [[セッション探索履歴キュー]]は[[タスクキュー]]のように機能しますが、
[[イベントループ]]ではなく[[最上位閲覧文脈]]に属しています。
[35] [[port message queue]] / [[unshipped port message queue]] は[[タスクキュー]]のような名前をしておりますが、
特殊な[[タスク源]]です。
[36] [[pending application cache download process tasks]] は[[タスクキュー]]のように[[タスク]]が追加されますが、
実行はされません。[[タスク]]の実行タイミングを遅延させるために使われます。
[6] [CITE@en[Web Applications 1.0 r2074 Define event loops, task queues, etc; Make 'fetching' use this mechanism (everything will in due course); Fix some cross-references around 'interactive content'.]]
([TIME[2008-08-16 09:52:00 +09:00]] 版)
<https://html5.org/r/2074>