[24] イベントループは、特に実行できるタスクのないアイドル状態となることがあります。
requestIdleCallback
でコールバック関数が登録されている場合、
アイドル期間が設定され、コールバック関数が実行されます。
[2] 利用者エージェントは、イベントループイベントループに関して、 十分な時間アイドルであり続けそうだと思われる場合であって、 他のイベントループその他のより優先度の高い作業に悪影響を及ぼさないと考えられる場合には、 イベントループの新しいアイドル期間を開始するべきです >>1。
[3] 利用者エージェントは、電力消費の節約のために文書が隠れている場合にアイドル期間を開始する頻度を下げる >>1 など、 適当に調整できます。
[25] アイドルとはどのような状態なのかはあまり厳密には定義されていませんが、 イベントループですぐに実行可能な状態のタスクがタスクキューに見当たらないことを表しているようです。
[26] ネットワーク待ちの fetch や、時間経過待ちの setTimeout
の処理があっても、すぐに実行可能なタスクではありませんから、
アイドル状態となり得ます。
[4] イベントループのアイドル期間開始アルゴリズムは、 次のようにしなければなりません >>1。
[6] イベントループは、 最終アイドル期間締切を持ちます。 初期値は 0 です。 >>1
[20] 締切は、利用者エージェントが任意の基準で決定できます。
requestIdleCallback
のコールバックの実行で、
他の時間に厳しいタスクが遅延してしまわないように注意する必要があります。
そのため、次の最小値とするべきです >>1。
setTimeout
と setInterval
のタイマーで直近のものrequestAnimationFrame
のコールバックの次の実行[18] アイドル期間とは、 今から締切までをいいます。 イベントループのアイドル期間は、同時に複数開始することはできません。 >>1
[29] アイドル期間開始アルゴリズムは、イベントループから呼び出されます。
[19] 利用者エージェントは、途中でアイドル状態でなくなったと判断したら、 締切を待たずにアイドル期間を打ち切ることもできます。 その場合であっても、締切まで次のアイドル期間は開始できません。 >>1
[217] ワーカーが protected worker でなくなるとは、 このアイドル状態に近いものを指しているようです (ワーカーの性質により、 本項での説明とは異なる点もあります)。
[27] アイドル状態と busy indicator が停止している状態は一致しません。
[130] ブラウザー拡張や埋め込みブラウザー、他のアプリケーションから Webブラウザーを制御する API などは、 Webページの読み込みが終わり 「安定」した状態 (idle 状態) になったことを検知したい場合があります。
[131] 例えば Webページの表示が完了したらスクリーンショットを撮るソフトウェアの実装には、表示の完了のタイミングを知る必要があります。ここでいう表示の完了は、 必ずしも completely loaded ではなく、読み込み完了後に遅延して実行されるスクリプトの完了も待ちたいです。
[132] Webアプリケーションのテストのために外部から Webブラウザーを制御する場合、 クリックなどの入出力操作を擬似的に発生させ、それに対するスクリプトの一連の動作が終わったら、 その時点の状態を確認したいかもしれません。
[133] この状態は仕様上の概念ではありませんから (Webサイトの相互運用性には影響しません)、
判断方法はそれぞれの実装によります。一般的には、次のように判断するのが妥当でしょう。document.open
されていないsetTimeout
や
Refresh
など) がない
[177] 媒体の再生、アニメーション、ワーカーの実行、
EventSource
や WebSocket
などは、
無視するのが適当そうです。
[193] 無限に読み込みが続く場合やスクリプトによりアニメーションする場合など、 この定義の「アイドル状態」に至らないこともあり得ます。
[28] Integrate with requestIdleCallback (rmcilroy著, ) https://github.com/whatwg/html/commit/01787ee712a7803e64e0da6ac9644a5e6b8d2cca
[30] Missing definition for "idle time" · Issue #70 · w3c/requestidlecallback () https://github.com/w3c/requestidlecallback/issues/70
[31] Hook into HTML spec. by rmcilroy · Pull Request #75 · w3c/requestidlecallback () https://github.com/w3c/requestidlecallback/pull/75
[32] Integrate with requestIdleCallback by domenic · Pull Request #3570 · whatwg/html () https://github.com/whatwg/html/pull/3570
[33] Integrate with requestIdleCallback by rmcilroy · Pull Request #4104 · whatwg/html () https://github.com/whatwg/html/pull/4104