-
Notifications
You must be signed in to change notification settings - Fork 4
/
656.txt
234 lines (182 loc) · 11.3 KB
/
656.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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
* 仕様書
[REFS[
- [21] [CITE@en[Cooperative Scheduling of Background Tasks]] ([TIME[2016-07-20 22:12:51 +09:00]]) <https://w3c.github.io/requestidlecallback/>
]REFS]
* [CODE(DOMi)@en[Window]] インターフェイス [CODE(DOMm)@en[requestIdleCallback]] メソッド
[45] [CODE(DOMi)@en[Window]] [[オブジェクト]]の [DFN[[CODE(DOMm)@en[requestIdleCallback]]]]
[[メソッド]]は、[[アイドル状態]]で実行するべき[[コールバック関数]]を登録するものです。
[FIG(list members)[
: [51] 第1引数 :
:[[コールバック関数]]です。任意の [[JavaScript関数]]を指定できます。
必須です。
: [52] 第2引数:
省略可能な[[辞書]] [DFN[[CODE[IdleRequestOptions]]]] [SRC[>>21]] です。
次の[[辞書メンバー]]を指定できます。
[FIG(list members)[
:[53] [CODE(DOMa)@en[timeout][IdleRequestOptions]]:
タイムアウト処理の実行前に最低限待つべき時間を[[ミリ秒]]単位で指定できます。
[CODE(IDL)@en[unsigned long]] です [SRC[>>21]]。
[[辞書メンバー]]としては必須ですが、[[辞書]]自体を省略した時の既定値はタイムアウト無しとなります。
なお、この指定は最低限の待ち時間であり、[[Webブラウザー]]は状況に応じて更に長く待つことも認められています。
]FIG]
]FIG]
[54] この[[メソッド]]は、[[ハンドル]]を返します。これは今回の[[コールバック関数]]の登録を表すもので、
[CODE(DOMm)@en[cancelIdleCallback]] の実行時に指定するものです。 [CODE(IDL)@en[unsigned long]]
です [SRC[>>21]]。
-*-*-
[60] [[コールバック関数]]は、 [[Web IDL]] では[[コールバック関数]]の[[データ型][データ型 (Web IDL)]]
[DFN[[CODE(DOMi)@en[IdleRequestCallback]]]] [SRC[>>21]]
と呼ばれています。
[61] [[コールバック関数]]は、引数として [CODE(DOMi)@en[IdleDeadline]] を1つ受け取ります
[SRC[>>21]]。
[62] [[コールバック関数]]の[[返し値]]は使われません [SRC[>>21]]。
-*-*-
[30] [CODE(DOMi)@en[Window]] [[インターフェイス]]の
[CODE(DOMm)@en[requestIdleCallback]]
[[メソッド]]は、次のようにしなければ[MUST[なりません]] [SRC[>>21]]。
[FIG(steps)[
= [31] [VAR[コールバック]]を、必須の第1引数を [CODE(IDL)@en[IdleRequestCallback]]
と解釈した結果に設定します。
= [32] [VAR[オプション群]]を、省略可能な第2引数を [CODE(IDL)@en[IdleRequestOptions]]
と解釈した結果に設定します。
= [33] [VAR[窓]]を、[[文脈オブジェクト]]に設定します。
= [34] [VAR[窓]]の[F[アイドルコールバック識別子]]を、 [N[1]] [[インクリメント]]します。
= [35] [VAR[ハンドル]]を、[VAR[窓]]の[F[アイドルコールバック識別子]]に設定します。
= [36] ([VAR[ハンドル]], [VAR[コールバック]]) を、
[VAR[窓]]の[F[アイドル要求コールバック群のリスト]]に [[push]] します。
= [37] [VAR[ハンドル]]を返します。
]FIG]
[38] 引き続き、[[並列に]]、次のようにしなければ[MUST[なりません]] [SRC[>>21]]。
[FIG(steps)[
= [39] [VAR[オプション群]]が [CODE[null]] ではなく、
[VAR[オプション群]]の [F[[CODE(DOMa)@en[timeout][requestIdleCallback]]]]
が[[正]]なら、
== [40] [VAR[オプション群]]の [F[[CODE(DOMa)@en[timeout][requestIdleCallback]]]]
の[[ミリ秒]]分、待ちます。
==
@@ [41] このアルゴリズムの開始時刻 + [VAR[オプション群]]の [F[[CODE(DOMa)@en[timeout][requestIdleCallback]]]] の[[ミリ秒]]、よりも小さなこのアルゴリズムの他の実行が未完了なら、
それを待ちます。
== [42] [[利用者エージェント]]定義の時間、待ちます。
これは[[電力消費]]の最適化の余地を[[利用者エージェント]]に与えるものです。
== [43] [[タスクをキューに追加]]します。
[FIG(list members)[
: [VAR[タスク源]] : [[アイドルタスクタスク源]]
: [VAR[処理]] :
[FIG(steps)[
= [44] [VAR[ハンドル]]と[VAR[窓]]について、
[[アイドルコールバックタイムアウトアルゴリズム]]を実行します。
]FIG]
]FIG]
]FIG]
* [CODE(DOMi)@en[Window]] インターフェイス [CODE(DOMm)@en[cancelIdleCallback]] メソッド
[55] [CODE(DOMi)@en[Window]] [[オブジェクト]]の [DFN[[CODE(DOMm)@en[cancelIdleCallback]]]]
[[メソッド]]は、登録済みの[[コールバック関数]]の実行を取り消すものです。
[FIG(list members)[
: [56] 第1引数 :
登録時に [CODE(DOMm)@en[requestIdleCallback]] [[メソッド]]が返した[[ハンドル]]を指定します。
]FIG]
[57] 該当するものが既に実行された場合や、該当するものがない場合には、何も起こりません。
[58] [[ハンドル]]は、 [CODE(DOMm)@en[setTimeout]] や [CODE(DOMm)@en[setInterval]]
とは別に管理されています。
[59] 一度利用された[[ハンドル]]が (同じ [CODE(DOMi)@en[Window]] で)
再利用されることはありません。 未使用の[[ハンドル]]が [CODE(DOMm)@en[cancelIdleCallback]]
されても、その後 [CODE(DOMm)@en[requestIdleCallback]] で利用されることはあり得ます。
その場合でも改めて [CODE(DOMm)@en[cancelIdleCallback]] しない限り普通に実行されます。
-*-*-
[46] [CODE(DOMi)@en[Window]] [[インターフェイス]]の
[CODE(DOMm)@en[cancelIdleCallback]]
[[メソッド]]は、次のようにしなければ[MUST[なりません]] [SRC[>>21]]。
[FIG(steps)[
= [47] [VAR[ハンドル]]を、必須の第1引数を [CODE(IDL)@en[unsigned long]] として解釈した結果に設定します。
= [48] [VAR[窓]]を、[[文脈オブジェクト]]に設定します。
= [49] [VAR[窓]]の[F[アイドル要求コールバック群のリスト]]から、
[F[ハンドル]]が[VAR[ハンドル]]の項目を(あれば)削除します。
= [50] [VAR[窓]]の[F[走らせられるアイドルコールバック群のリスト]]から、
[F[ハンドル]]が[VAR[ハンドル]]の項目を(あれば)削除します。
]FIG]
* 処理
[27] [CODE(DOMi)@en[Window]] は、
[DFN[[F[[RUBYB[[[アイドル要求コールバック群のリスト]]]@en[list of idle request callbacks]]]]]]を持ちます。
初期状態は空です。 [SRC[>>21]]
[28] [CODE(DOMi)@en[Window]] は、
[DFN[[F[[RUBYB[[[走らせられるアイドルコールバック群のリスト]]]@en[list of runnable idle callbacks]]]]]]を持ちます。
初期状態は空です。 [SRC[>>21]]
[29] [CODE(DOMi)@en[Window]] は、
[DFN[[F[[RUBYB[[[アイドルコールバック識別子]]]@en[idle callback identifier]]]]]]を持ちます。
初期状態は [N[0]] です。 [SRC[>>21]]
* 歴史
[1] [CITE@en[Re: setImmediate usage on the web]]
([[Ross McIlroy]] 著, [TIME[2015-06-25 00:50:41 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-web-perf/2015Jun/0113.html>
[2] [CITE[Cooperative Scheduling of Background Tasks - Google ドキュメント]]
([TIME[2015-06-25 18:42:08 +09:00]] 版)
<https://docs.google.com/document/d/1ZgYOBi_39-N6AbjL99qesiDagaSTbpN0R6CrSVK8NE4/edit?pli=1#>
[3] [CITE@en[''''''[''''''RequestIdleCallback'''''']'''''' Editor's Draft of requestIdleCallback spec]]
([[Ross McIlroy]] 著, [TIME[2015-07-22 22:28:07 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-web-perf/2015Jul/0014.html>
[4] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2015-07-23 00:56:37 +09:00]] 版)
<https://w3c.github.io/requestidlecallback/>
[5] [CITE@en[Cooperative Scheduling of Background Tasks]]
( ([TIME[2015-09-17 12:28:31 +09:00]] 版))
<http://www.w3.org/TR/2015/WD-requestidlecallback-20150917/>
[6] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2015-09-19 04:12:21 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-requestidlecallback-20150918/>
[7] [CITE@en[Clamp timeRemaining() to 5 microsecond resolution. · w3c/requestidlecallback@241decc]]
([TIME[2015-09-25 19:30:30 +09:00]] 版)
<https://github.com/w3c/requestidlecallback/commit/241decc5b2e52b7b6b83a1de42203b4576a47d64>
[8] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2015-09-25 08:59:16 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-requestidlecallback-20150924/>
[9] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2015-09-25 09:01:19 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-requestidlecallback-20150925/>
[10] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2015-09-29 22:33:11 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-requestidlecallback-20150929/>
[11] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2015-11-26 08:23:40 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-requestidlecallback-20151125/>
[12] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2015-12-10 04:13:51 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-requestidlecallback-20151209/>
[13] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2016-02-05 06:28:03 +09:00]] 版)
<https://www.w3.org/TR/2016/WD-requestidlecallback-20160204/>
[14] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2016-02-26 04:52:28 +09:00]] 版)
<https://www.w3.org/TR/2016/WD-requestidlecallback-20160225/>
[15] [CITE@en[associate rIC callbacks with Window · w3c/requestidlecallback@311cccb]]
([TIME[2016-05-01 13:49:19 +09:00]] 版)
<https://github.com/w3c/requestidlecallback/commit/311cccb16237c58b4bdb1ed665fb36702ecafd5a>
[16] [CITE@en[Cooperative Scheduling of Background Tasks]]
([TIME[2016-04-29 02:04:45 +09:00]] 版)
<https://www.w3.org/TR/2016/WD-requestidlecallback-20160428/>
[17] [CITE@en[Allow arbitrary inter-document callback ordering · w3c/requestidlecallback@cac526a]]
([TIME[2016-05-01 13:50:39 +09:00]] 版)
<https://github.com/w3c/requestidlecallback/commit/cac526ae7057d6958c3be82b62026a3dbccca04b>
[18] [CITE@en[privacy section]]
( ([[igrigorik]]著, [TIME[2016-05-05 07:34:22 +09:00]]))
<https://github.com/w3c/requestidlecallback/commit/468fa6df94b00a54814dc4cf414b556fa41295d3>
[19] [CITE@en[Cooperative Scheduling of Background Tasks]]
( ([TIME[2016-05-18 06:55:55 +09:00]]))
<https://www.w3.org/TR/2016/WD-requestidlecallback-20160517/>
[20] [CITE[Using requestIdleCallback | Web Updates - Google Developers]]
([TIME[2016-07-19 06:25:53 +09:00]])
<https://developers.google.com/web/updates/2015/08/using-requestidlecallback>
[22] [CITE@en[w3c/requestidlecallback: Cooperative Scheduling of Background Tasks]]
([TIME[2016-07-27 00:05:18 +09:00]])
<https://github.com/w3c/requestidlecallback/>
[23] [CITE@en[consider work beyond other event loops]]
([[igrigorik]]著, [TIME[2016-11-29 07:38:18 +09:00]])
<https://github.com/w3c/requestidlecallback/commit/3a69ac324fdf9c4cc0fd5b7e249d2df680ee0a79>
[24] [CITE@en[Incorporate feedback (#50)]]
([[igrigorik]]著, [TIME[2016-12-15 02:40:45 +09:00]])
<https://github.com/w3c/requestidlecallback/commit/9f684e30b2c536db9038430a9e9d286da5a28295>
[25] [CITE@en-US[requestIdleCallback - Web APIs | MDN]]
([TIME[2016-12-15 22:24:40 +09:00]])
<https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback>
[26] [CITE@en[1198381 – Implement requestIdleCallback]]
([TIME[2016-12-16 09:41:29 +09:00]])
<https://bugzilla.mozilla.org/show_bug.cgi?id=1198381>