[45] [DFN[[CODE(DOMm)@en[[[setTimeout()]]]]]] と [DFN[[CODE(DOMm)@en[[[setInterval()]]]]]]
は、一定時間後、あるいは一定時間ごとに指定した処理を実行するものです。

* 仕様書

[REFS[
- [33] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-07-27 01:56:00 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#timers>'''
- [47] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#apis-available-to-workers>
]REFS]

* 定義

[46] [DFN[[CODE(DOMi)@en[WindowOrWorkerGlobalScope]]]] [[インターフェイス]]は、[[メソッド]]
[DFN[[CODE(DOMm)@en[[[setTimeout]]]]]], [DFN[[CODE(DOMm)@en[[[setInterval]]]]]],
[DFN[[CODE(DOMm)@en[[[clearTimeout]]]]]], [DFN[[CODE(DOMm)@en[[[clearInterval]]]]]]
を持ちます [SRC[>>33]]。 [CODE(DOMi)@en[WindowOrWorkerGlobalScope]] は
[CODE(DOMi)@en[Window]] [SRC[>>33]] と [CODE(DOMi)@en[WorkerGlobalScope]] [SRC[>>47]]
が[[実装]]しています。

* タイマー設定メソッド

[48] [CODE(DOMm)@en[[[setTimeout]]]] と [CODE(DOMm)@en[[[setInterval]]]] は、
いずれも[[タイマー初期化手順]]を実行するものです [SRC[>>33]]。

[FIG(list members)[
: [49] 第1引数 :
一定時間後に実行されるべきコードを指定します。[[データ型]]は
[DFN[[CODE(DOMi)@en[TimerHandler]]]]、すなわち
[CODE(DOMi)@en[Function]] または [CODE(DOMi)@en[DOMString]] です [SRC[>>33]]。
この[[引数]]は必要です [SRC[>>33]]。
: [50] 第2引数 :
コードが実行されるまでの時間です。[[データ型]]は [CODE(IDL)@en[[[long]]]]
で、省略した場合の[[既定値]]は [CODE[[[0]]]] です [SRC[>>33]]。
: [51] 第3引数以降 :
任意の値を指定でき [SRC[>>33]]、コードへの[[引数]]として使われます。
]FIG]

[52] [[メソッド]]の返り値は、 [CODE(IDL)@en[[[long]]]] です [SRC[>>33]]。

* 待ち時間

[87] 与えられたコードは、 >>66、>>72、>>32 を待った後、実行されます。

[66] 基本となる待ち時間は、第2引数で指定された値です。ただしその値が4より小さく、
[[タイマー入れ子水準]] (なければ0) が5より大きいなら、4とします。 [SRC[>>33]]

[75] [DFN[[RUBYB[[[タイマー入れ子水準]]]@en[timer nesting level]]]] [SRC[>>33]] は、
入れ子回数の管理のための値です。[[タイマー初期化手順]]により追加された[[タスク]]に存在します。
追加された[[タスク]]の[[タイマー入れ子水準]]は、元の[[タスク]]の[[タイマー入れ子水準]]よりも1大きな値です [SRCD[>>33]]。

;; [31] 元々は最小でも 10ms とされていましたが、後に実装によっては最小 4ms となり、 >>27
で仕様もそれに揃いました。更に入れ子回数 (タイマーによる処理によって更にタイマー処理を予定した回数)
が4回までは 4ms の制限すらも撤廃されるようになり、仕様も  >>24 で追随しています。

[70] [CODE(DOMi)@en[[[Window]]]] では、
関連付けられている[[文書]]が[[完全に活性]]な状態の[[ミリ秒]]数として解釈されます [SRC[>>33]]。

[71] [CODE(DOMi)@en[[[WorkerGlobalScope]]]] では、[[ワーカー]]が [[suspend]]
されていない状態の[[ミリ秒]]数として解釈されます [SRC[>>33]]。

;; [86] いずれも、連続的な秒数ではなく、合計の秒数です。

[72] 同じ[[文脈オブジェクト]]について[[タイマー初期化手順]]が何度も呼ばれている場合、
呼び出しのタイミングがより早く、待ち時間 (>>66) が等しいか小さいものが実行完了 ([[タスク]]が追加完了)
されるまで、待つことになっています [SRC[>>33]]。

[32] [[利用者エージェント]]は更に加えて任意の時間待っても構いません [SRC[>>33]]。
[[電力]]等利用できる資源の制約や性能上の限界その他の要因により処理を遅らせることができます。

[EG[
[130] [[Internet Explorer]] のタイマーの動作の設定が [[Windows]]
[[コントロールパネル]]の省電力設定内にあります、
[[バッテリー]]駆動中か電源接続中かでも動作を変更できます。
]EG]

* 活性タイマーのリスト

[55] [CODE(DOMi)@en[WindowOrWorkerGlobalScope]] [[オブジェクト]] ([CODE(DOMi)@en[[[Window]]]] や
[CODE(DOMi)@en[[[WorkerGlobalScope]]]]) は[DFN[[RUBYB[[[活性タイマー群のリスト]]]@en[list of active timers]]]]を持ちます
[SRC[>>33]]。[[活性タイマーのリスト]]には、 [CODE(DOMm)@en[[[setTimeout]]]] や
[CODE(DOMm)@en[[[setInterval]]]] で指定された[[タイマー]]が含まれます。

[60] [[活性タイマーのリスト]]内の各項目は、[[非負整数]]により識別されます [SRC[>>33]]。
この[[非負整数]]は[[ハンドル][ハンドル (JavaScript)]]と呼ばれています。

[88] [[ハンドル][ハンドル (JavaScript)]]は、 [CODE(DOMi)@en[WindowOrWorkerGlobalScope]] 
[[オブジェクト]]の生存期間内において固有でなければ[['''なりません''']] [SRC[>>33]]。

;; [56] ということは [CODE(IDL)@en[[[long]]]] で表せる[[数]]の回数以上はタイマーを使えないことになります。

[89] [[ハンドル][ハンドル (JavaScript)]]は[[タイマー初期化手順]]の実行時 ([CODE(DOMm)@en[[[setInterval]]]] の場合は、初回のみ)
に[[利用者エージェント]]定義の方法で決定されます [SRC[>>33]]。
[[タイマー初期化手順]]はこの[[ハンドル][ハンドル (JavaScript)]]を使って[[活性タイマーのリスト]]に新しい項目を追加し、
その[[ハンドル][ハンドル (JavaScript)]]を返します [SRC[>>33]]。

[4] このリストは、[[unloading document cleanup steps]] によって空にされることがあります。

[123] [[活性タイマーのリスト]]内のタイマーが次にいつ実行されるかは、
[[アイドル期間]]の締切の決定に影響する可能性があります。

* タイマーの実行

[74] [CODE(DOMi)@en[WindowOrWorkerGlobalScope]] [[インターフェイス]]の
[CODE(DOMm)@en[setTimeout]] [[メソッド]]と
[CODE(DOMm)@en[setInterval]] [[メソッド]]は、次のようにしなければ[MUST[なりません]]
[SRC[>>33]]。
[FIG(steps)[
= [76] [VAR[取り扱い器]]を、第1引数を必須の [CODE(DOMi)@en[TimerHandler]] として解釈した結果に設定します。
= [79] [VAR[タイムアウト]]を、第2引数を [CODE[long]] として解釈した結果に設定します。
既定値は [N[0]] とします。
= [81] [VAR[引数群]]を、第3引数以後すべての[[引数]]に設定します。
= [95] [VAR[繰り返し]]を、[CODE(DOMm)@en[setInterval]] [[メソッド]]なら[[真]]、
[CODE(DOMm)@en[setTimeout]] [[メソッド]]なら[[偽]]に設定します。
= [94] [[文脈オブジェクト]]、[VAR[取り扱い器]]、[VAR[タイムアウト]]、[VAR[引数群]]、
[VAR[繰り返し]]について、
[[タイマー初期化手順]]を実行した結果を返します。
[VAR[以前のハンドル]]は、[[null]] とします。
]FIG]

[59] [DFN[[RUBYB[タイマー初期化手順]@en[timer initialization steps]]]]は、
[VAR[文脈]]、[VAR[取り扱い器]]、[VAR[タイムアウト]]、[VAR[引数群]]、
[VAR[繰り返し]]、[VAR[以前のハンドル]]について、次のようにします [SRC[>>33]]。

[FIG(steps)[
= [73] [VAR[文脈]]が [CODE(DOMi)@en[Window]] なら、
== [98] [VAR[文脈]]を、[VAR[文脈]]の[F[[CODE(DOMi)@en[WindowProxy]]]] に設定します。
= [69] [VAR[以前のハンドル]]が [[null]] なら、
== [82] [VAR[ハンドル]]を、[VAR[文脈]]の[F[活性タイマーのリスト]]のどの項目の[F[ハンドル][ハンドル (JavaScript)]]とも異なる[[利用者エージェント]]定義の[[正整数]]に設定します。
== [90] [VAR[文脈]]の[F[活性タイマーのリスト]]に、[F[ハンドル][ハンドル (JavaScript)]]が[VAR[ハンドル]]の項目を追加します。
= [83] それ以外なら、
== [84] [VAR[ハンドル]]を、[VAR[以前のハンドル]]に設定します。
= [96] [VAR[呼び出し元realm]]を、[[現在Realm記録]]に設定します。
= [97] [VAR[呼び出し先realm]]を、[VAR[文脈]]の[F[Realm]]に設定します。
= [134] [VAR[元スクリプト]]を、[[活性スクリプト]]に設定します。
= [128] [VAR[タイムアウト]]が[[負]]の場合、
== [129] [VAR[タイムアウト]]を、[N[0]] に設定します。
= [104] [[現在走っているタスク]]がタイマー[[タスク]]なら、
== [105] [VAR[入れ子水準]]を、[[現在走っているタスク]]の[F[タイマー入れ子水準]]に設定します。
= [106] それ以外なら、
== [107] [VAR[入れ子水準]]を、 [N[0]] に設定します。
= [108] [VAR[入れ子水準]]が [N[5]] より大きく、[VAR[タイムアウト]]が [N[4]] より小さいなら、
== [109] [VAR[タイムアウト]]を、 [N[4]] に設定します。
= [110] [VAR[入れ子水準]]を、[VAR[入れ子水準]] + 1 に設定します。
= [99] [VAR[タスク]]を、[VAR[ハンドル]]、[VAR[文脈]]、[VAR[取り扱い器]]、[VAR[タイムアウト]]、
[VAR[引数群]]、[VAR[繰り返し]]フラグ、[VAR[呼び出し元realm]]、[VAR[呼び出し先realm]]、
[VAR[入れ子水準]]に関するタイマータスク (>>77) に設定します。
= [112] [VAR[文脈]]において[VAR[タイムアウト]]後の[VAR[タスク]]の実行を予約します (>>113)。
= [111] [VAR[ハンドル]]を返します。
]FIG]

[77] [VAR[ハンドル]]、[VAR[文脈]]、[VAR[取り扱い器]]、
[VAR[引数群]]、[VAR[繰り返し]]フラグ、
[VAR[呼び出し元realm]]、[VAR[呼び出し先realm]]、
[VAR[入れ子水準]]に関するタイマー[[タスク]]は、次のようなものです [SRC[>>33]]。
[FIG(list members)[
: [F[処理]] :
[FIG(steps)[
= [63] [VAR[文脈]]の[F[活性タイマーのリスト]]の、
[F[ハンドル][ハンドル (JavaScript)]]が[VAR[ハンドル]]の項目の[F[消去済み]]フラグが設定されていれば、
== [100] ここで停止します。
= [62] [VAR[取り扱い器]]により、
[FIG(switch)[
: [78] [CODE(IDL)@en[Function]] : 
[[コールバック関数の呼び出し]]を実行します。
[FIG(list members)[
: [[コールバック関数]] : [VAR[取り扱い器]]
: [[コールバック[CODE(JS)[this]]値]] : [VAR[文脈]]
]FIG]
: [80] [CODE(DOMi)@en[DOMString]] :
[FIG(steps)[
= [101] [CODE[HostEnsureCanCompileStrings]]([VAR[呼び出し元realm]]、[VAR[呼び出し先realm]])
を実行します。[[例外]]が[[投げ]]られたら、[[例外を報告]]し、
ここで停止します。
= [135] [VAR[基底URL]]を、
[VAR[元スクリプト]]の[F[基底URL]]に設定します。
= [136] [VAR[オプション群]]を、
新しい[[スクリプトfetchオプション群]]に設定します。
[FIG(list members)[ [137] [[スクリプトfetchオプション群]]

: [F[暗号学的nonce]] : [VAR[元スクリプト]]の[F[fetchオプション群]]の[F[暗号学的nonce]]
: [F[一貫性メタデータ]] : [[空文字列]]
: [F[構文解析器メタデータ]] : [CODE[not-parser-inserted]]
: [F[credentialsモード]] : 
[VAR[元スクリプト]]の[F[fetchオプション群]]の[F[credentialsモード]]
: [F[参照元ポリシー]] :
[VAR[元スクリプト]]の[F[fetchオプション群]]の[F[参照元ポリシー]]

]FIG]
= [102] [VAR[スクリプト]]を、[[古典スクリプトの作成]]を実行した結果に設定します。
[FIG(list members)[

: [VAR[ソーステキスト]] : [VAR[取り扱い器]]
: [VAR[設定群オブジェクト]] : [VAR[文脈]]の[F[環境設定群オブジェクト]]
: [VAR[基底URL]] : [VAR[文脈]]の[F[環境設定群オブジェクト]]の[F[API基底URL]]
: [VAR[オプション群]] : [VAR[オプション群]]


]FIG]
= [103] [VAR[スクリプト]]について[[古典スクリプトの実行]]をします。
]FIG]
]FIG]
= [65] [VAR[繰り返し]]フラグが[[真]]なら、
[[タイマー初期化手順]]を実行します。
[VAR[文脈]]、[VAR[取り扱い器]]、[VAR[タイムアウト]]、[VAR[引数群]]を引き渡します。
[VAR[繰り返し]]フラグは[[真]]、[VAR[以前のハンドル]]は[VAR[ハンドル]]とします。
]FIG]
: [F[タスク源]] :
[DFN[[RUBYB[[[タイマータスク源]]]@en[timer task source]]]]
: [F[タイマー入れ子水準]] : [VAR[入れ子水準]]
]FIG]

;; [85] [CODE(DOMm)@en[[[setInterval]]]] に[[文字列]]を[VAR[取り扱い器]]として指定した場合、
毎回[[スクリプト]]のコンパイルから行われることになります。

[113] [VAR[文脈]]において[VAR[タイムアウト]]後に[VAR[タスク]]を実行するとは、
[VAR[文脈]]の[F[実行待ちタイマー群]]の末尾に新しい組 ([VAR[タスク]], [VAR[タイムアウト]])
を追加して、[VAR[起点]]を現在時刻として、
[[並列に]]、次のすべての条件が満たされるまで待ちます [SRC[>>33]]。
[FIG(list)[
- [114] [VAR[文脈]]が [CODE(DOMi)@en[Window]] なら、
-- [115] [VAR[起点]]以後の[VAR[文脈]]の[F[文書]]が[F[完全に活性]]である[[時間]]の合計が[VAR[タイムアウト]][[ミリ秒]]となる
- [116] [VAR[文脈]]が [CODE(DOMi)@en[WorkerGlobalScope]] なら、
-- [117] [VAR[起点]]以後の[VAR[文脈]]が [F[suspend]] されていない[[時間]]の合計が[VAR[タイムアウト]][[ミリ秒]]となる
- [118] [VAR[文脈]]の[F[実行待ちタイマー群]]で本組よりも前にあって[F[タイムアウト]]が[VAR[タイムアウト]][[以下]]のものがなくなる
- [119] [[利用者エージェント]]定義の条件が満たされる
]FIG]

[120] 条件が満たされたら、組 ([VAR[タスク]], [VAR[タイムアウト]]) を[VAR[文脈]]の[F[実行待ちタイマー群]]から削除し、
[VAR[タスク]]を[[タスクキューに追加]]します [SRC[>>33]]。

* タイマー消去メソッド

[53] [CODE(DOMm)@en[[[clearTimeout]]]] と [CODE(DOMm)@en[[[clearInterval]]]]
は、いずれも、[[活性タイマーのリスト]]から[[引数]]で指定された[[数]]により識別される項目があれば、
これを消去します。該当するものがなければ、何もしません。 [SRC[>>33]]

[FIG(list members)[
: [57] 第1引数 :
[[long]] の[[引数]]を1つ指定できます [SRC[>>33]]。省略した場合の[[既定値]]は
[N[0]] です [SRC[>>33]]。
]FIG]

[54] [[メソッド]]の返り値はありません [SRC[>>33]]。

[91] [CODE(DOMi)@en[WindowOrWorkerGlobal]] [[インターフェイス]]の
[CODE(DOMm)@en[clearTimeout]] [[メソッド]]と
[CODE(DOMm)@en[clearInterval]] [[メソッド]]は、次のようにしなければ[MUST[りません]]
[SRC[>>33]]。
[FIG(steps)[
= [92] [VAR[ハンドル]]を、第1引数を [CODE[long]] として解釈した結果に設定します。
既定値は [N[0]] とします。
= [93] [[文脈オブジェクト]]の[F[活性タイマーのリスト]]に、
[F[ハンドル][ハンドル (JavaScript)]]が[VAR[ハンドル]]の項目があれば、
その[F[消去済み]]フラグを設定します。
]FIG]

;; [58] どちらのメソッドも、同じように動作します。 [VAR@en[repeat]] フラグは無視されます。

* 歴史

[2]
[CITE[IRC logs: freenode / #whatwg / 20070409]] ([CODE[2007-04-12 00:04:42 +09:00]] 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20070409#l-233>
([[名無しさん]] [WEAK[2007-04-11 15:37:28 +00:00]])

[6]
[CITE@en[Re: Proposal: High resolution (and otherwise improved) timer API]] ([[Maciej Stachowiak]] 著, [CODE[2008-10-04 06:21:35 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-webapps/2008OctDec/0031.html>

>I cannot state with certainty that nothing lower than  
10ms is safe. Chrome shipped with a 1ms delay and that was found to  
create problems on a number of sites, including nytimes. They are  
planning to try 4ms next. We would consider using a lower limit in the  
official webkit.org version of WebKit, not not as low as 1ms.

[9] [CITE[IRC logs: freenode / #whatwg / 20090504]]
([TIME[2009-08-05 07:43:45 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20090504#l-24>

[10] [CITE['''['''webkit-dev''']''' setTimeout as browser speed throttle]]
([TIME[2008-10-01 15:56:01 +09:00]] 版)
<http://lists.macosforge.org/pipermail/webkit-dev/2008-September/005093.html>

[12] [CITE@en[Web Applications 1.0 r5535     Allow timers to be delayed when power usage is an issue.Fixing http://www.w3.org/Bugs/Public/show_bug.cgi?id=10633]]
( ([TIME[2010-09-29 07:08:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5534&to=5535>

[13] [CITE[Bug 10633 – Minimums for timer granularity should be left to the user agent - different form factors have different power requirements]]
( ([TIME[2010-09-29 07:19:30 +09:00]] 版))
<http://www.w3.org/Bugs/Public/show_bug.cgi?id=10633>

[14] [CITE[''''''[''''''whatwg'''''']'''''' Timeouts and monotonic vs clock time]]
( ([TIME[2011-01-09 13:44:38 +09:00]] 版))
<http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-January/029734.html>

[15] [CITE['''['''whatwg''']''' setTimeout clamps]]
([TIME[2011-01-16 12:00:52 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2011-January/029886.html>

[16] [CITE@en[Web Applications 1.0 r5879     Define 'this' for setTimeout functions]]
( ([TIME[2011-02-12 08:50:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=5878&to=5879>

[17] [CITE@en[Web Applications 1.0 r6492 Explain ordering of setTimeout() calls better]]
( ([TIME[2011-08-18 06:36:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6491&to=6492>

[18] [CITE@en[Web Applications 1.0 r6899     Make setTimeout() not be well-ordered across multiple browsing contexts, so as to allow user agents to e.g. throttle setTimeout()s in background tabs.]]
( ([TIME[2012-01-18 07:13:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6898&to=6899>

[19] [CITE@en[Web Applications 1.0 r6949     Turns out clearTimeout() and clearInterval() are synonyms! Who knew? Oh what a tangled Web we weave.Fixing https://www.w3.org/Bugs/Public/show_bug.cgi?id=14907]]
( ([TIME[2012-02-01 05:20:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6948&to=6949>

[20] [CITE[IRC logs: freenode / #whatwg / 20120626]]
( ([TIME[2012-07-12 23:44:39 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120626#l-1008>

[21] [CITE@en-US[Window Object 1.0]]
( ([TIME[2006-04-08 02:19:28 +09:00]] 版))
<http://www.w3.org/TR/Window/#timers>

[22] [CITE@en[Bug 15007 – Add an API to queue a task]]
( ([TIME[2013-02-09 22:45:48 +09:00]] 版))
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=15007>

[23] [CITE@en[Web Applications 1.0 r7737     Try to more closely match reality.]]
( ([TIME[2013-03-07 08:03:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7736&to=7737>

[24] [CITE@en[Web Applications 1.0 r8095     Refactor the timer code to match current practice in WebKit, Gecko, and Blink (the ones whose source I could examine)]]
( ([TIME[2013-07-27 08:27:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8094&to=8095>

[25] [CITE[Bug 376643 &#8211; setInterval fires repeatedly with incorrectly small delays if machine is suspend/resumed, hibernate/resumed or process is SIGSTOP/SIGCONT]] ([CODE[2007-06-23 10:13:26 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=376643>

[26] [CITE[HTML5 IRC logs: freenode / #whatwg / 20070622]] ([TIME[2007-06-23 10:17:05 +09:00]] 版) <http://krijnhoetmer.nl/irc-logs/whatwg/20070622#l-608>
([[名無しさん]] [WEAK[2007-06-23 01:21:49 +00:00]])

[27] [CITE@en[Web Applications 1.0 r6362     Make setInterval() clamp at 4ms as well.]]
( ([TIME[2011-08-04 08:54:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=6361&to=6362>

[34] [CITE@en[Efficient Script Yielding]] ([TIME[2013-07-23 11:06:32 +09:00]] 版) <http://w3c-test.org/webperf/specs/setImmediate/>


[1]
[CITE[Scope of setTimeout Method]] <http://www2u.biglobe.ne.jp/~oz-07ams/prog/js-notes/setTimeout.html>

[7] [CITE[for 文を setTimeout に変換する - IT戦記]] ([TIME[2009-02-02 01:57:56 +09:00]] 版) <http://d.hatena.ne.jp/amachang/20071108/1194501306>

[8]
[CITE[JSDeferred を高速化する (試し中) - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech]] ([TIME[2009-03-31 08:34:10 +09:00]] 版) <http://subtech.g.hatena.ne.jp/cho45/20090125/1232831437>

[28] [CITE[zarame.com/zide/ 日記(2005-11-24)]] <http://zarame.com/zide/diary/20051124.html#p01>
([[名無しさん]] [WEAK[2005-12-07 11:45:55 +00:00]])

[29] [CITE[ぷろじぇくと、みすじら。]] <http://www.fastwave.gr.jp/diarysrv/misuzilla/200511c.html#20051126-4>
([[名無しさん]] [WEAK[2005-12-07 11:46:42 +00:00]])

[30] [CITE[zarame.com/zide/ 日記(2005-11-28)]] <http://zarame.com/zide/diary/20051128.html#p01>
([[名無しさん]] [WEAK[2005-12-07 11:46:56 +00:00]])

[35] [CITE[setIntervalとsetTimeoutを調べた結果余分なことになった - 三等兵]]
( ([TIME[2013-07-24 01:30:24 +09:00]] 版))
<http://d.hatena.ne.jp/sandai/20100513/p1>

[36] [CITE@en-US[window.setTimeout - Web API reference | MDN]]
( ([TIME[2013-07-10 02:55:41 +09:00]] 版))
<https://developer.mozilla.org/en/docs/Web/API/window.setTimeout>

[37] [CITE[Issue 792 - chromium - TRACKING: Chrome does not implement the Webkit 10ms setTimeout clamp. - An open-source project to help move the web forward. - Google Project Hosting]]
( ([TIME[2013-07-27 05:59:41 +09:00]] 版))
<https://code.google.com/p/chromium/issues/detail?id=792>

[38] [CITE@en-US[David Baron's weblog: setTimeout with a shorter delay]]
( ([TIME[2013-07-27 05:59:54 +09:00]] 版))
<http://dbaron.org/log/20100309-faster-timeouts>

[39] [CITE@en[123273 – setTimeout(something, 0) causes 100% CPU constant]]
( ([TIME[2013-07-27 06:07:25 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=123273>

[40] [CITE@en[686201 – implementation: setImmediate API]]
( ([TIME[2013-07-27 06:16:49 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=686201>

[41] [CITE@en[839816 – Make next-tick mechanisms like postMessage faster]]
( ([TIME[2013-07-27 06:36:50 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=839816>

[42] [CITE[''''''[''''''whatwg'''''']'''''' Proposal: requestBackgroundProcessing()]]
( ([TIME[2014-02-20 21:38:44 +09:00]] 版))
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2014-February/042075.html>

[43] [CITE@en[Web Applications 1.0 r8535 Move a setTimeout() requirement from prose to IDL.]]
( ([TIME[2014-03-08 07:55:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8534&to=8535>

[44] [CITE@en[Web Applications 1.0 r8508     Make clearTimeout()/clearInterval() (with no arguments) into no-ops; change the <table> role mapping so that tables aren't interactive.]]
( ([TIME[2014-02-25 03:44:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=8507&to=8508>

[3] [CITE@en[Web Applications 1.0 r8880 Fix callback logic to reference Web IDL and use the right conventions.]]
([TIME[2015-01-16 05:52:00 +09:00]] 版)
<https://html5.org/r/8880>

[5] [CITE@en[Fixes #179: Add note about clearing timers · whatwg/html@4b3e06e]]
([TIME[2015-10-24 13:18:35 +09:00]] 版)
<https://github.com/whatwg/html/commit/4b3e06eaa750f129f25999c742dfc782daa085c9>

[11] [CITE@en[Update ECMAScript and IDL integration · whatwg/html@550c57f]]
([TIME[2015-12-03 15:16:48 +09:00]] 版)
<https://github.com/whatwg/html/commit/550c57f186dd73784a8e4660440db2f642e37c0e>

[61] [CITE@en[Rewrite script execution on top of ES · whatwg/html@4891d18]]
([TIME[2015-12-23 01:06:44 +09:00]] 版)
<https://github.com/whatwg/html/commit/4891d18aaf2df1d40aa61f467a5a10cfc19dd85d>

[64] [CITE@en[Add <script type="module"> and module resolution/fetching/evaluation · whatwg/html@cd1a9fb]] ([TIME[2016-01-29 22:55:07 +09:00]] 版) <https://github.com/whatwg/html/commit/cd1a9fb1e83f7d0bc30be8b34ecdaf444a0b19a4>

[67] [CITE@en[Editorial: put properties shared across globals on mixin · whatwg/html@cdd48e1]]
([TIME[2016-04-07 20:04:34 +09:00]] 版)
<https://github.com/whatwg/html/commit/cdd48e1f570c817402bf62108847c4a9f4b00b1e>

[68] [CITE@en[Wire up HostEnsureCanCompileStrings to CSP · whatwg/html@374b54d]]
([TIME[2016-04-09 13:39:52 +09:00]] 版)
<https://github.com/whatwg/html/commit/374b54d3fce7c9c72b940d3e97f8e8f2845cde9b>

[121] [CITE@en[Purpose of timer nesting level for repeating timers is unclear · Issue #239 · whatwg/html]]
( ([TIME[2016-06-07 10:44:26 +09:00]]))
<https://github.com/whatwg/html/issues/239>

[122] [CITE@en[Existing Intervention to add--setTimeout/setInterval are aligned/clamped to 1 second in many browsers · Issue #5 · WICG/interventions]]
([TIME[2016-07-12 01:18:08 +09:00]])
<https://github.com/WICG/interventions/issues/5>

[124] [CITE@en[Background Tabs in Chrome 57  |  Web  |  Google Developers]]
([TIME[2017-03-14 09:42:32 +09:00]])
<https://developers.google.com/web/updates/2017/03/background_tabs>

[125] [CITE@en[Solve mobile performance]]
([[domenic]]著, [TIME[2017-04-01 11:19:25 +09:00]])
<https://github.com/whatwg/html/commit/d5f415efc7216aa5f527f4d94262aef2fffed8f6>

[126] [CITE@en[Revert "Solve mobile performance"]]
([[domenic]]著, [TIME[2017-04-03 13:01:12 +09:00]])
<https://github.com/whatwg/html/commit/3716990e05b51850ef7d3c874142b83fe9dd0aa6>

[127] [CITE@en[Clarify what should actually happen to negative timeouts]]
([[zcorpan]]著, [TIME[2017-04-06 15:30:59 +09:00]])
<https://github.com/whatwg/html/commit/f35e8b70886b5d9594a3d7869936470ea9493c43>

[131] [CITE@en[Editorial: move base URL from "module script" to "script"]]
([[domenic]]著, [TIME[2017-09-14 20:28:50 +09:00]])
<https://github.com/whatwg/html/commit/5458513792ab00d58e6c91ba48faaa611d034a2e>

[132] [CITE@en[Make integrity="" work on module scripts]]
([[domenic]]著, [TIME[2017-09-14 18:00:24 +09:00]])
<https://github.com/whatwg/html/commit/9275d955dcd604e959cfcc672e0c234b1b8c00db>

[133] [CITE@en[Fix import() inside setTimeout()/setInterval() strings]]
([[domenic]]著, [TIME[2017-12-18 15:08:32 +09:00]])
<https://github.com/whatwg/html/commit/12cdfefad607fc824e6ea64a4b967fc24043f684>

[138] [CITE@en[setTimeout() base URL/script fetch options behavior seems wrong · Issue #3116 · whatwg/html]]
([TIME[2017-12-21 17:53:08 +09:00]])
<https://github.com/whatwg/html/issues/3116>

[139] [CITE@en[Fix import() inside setTimeout()/setInterval() strings by domenic · Pull Request #3117 · whatwg/html]]
([TIME[2017-12-21 17:56:12 +09:00]])
<https://github.com/whatwg/html/pull/3117>

[140] [CITE@en[Chrome’s Headless mode gets an upgrade: introducing `--headless=new` - Chrome Developers]]
([TIME[1980-01-01T00:00:01.000Z]], [TIME[2023-08-21T03:30:10.341Z]])
<https://developer.chrome.com/articles/new-headless/#-virtual-time-budget>