Cooperative Scheduling of Background Tasks

Window インターフェイス requestIdleCallback メソッド (DOM)

[61] Window オブジェクトrequestIdleCallback メソッドは、 アイドル状態になったら実行するコールバック関数を登録するものです。 cancelIdleCallback メソッドは、その登録を取り消すものです。

仕様書

Window インターフェイス requestIdleCallback メソッド

[45] Window オブジェクトrequestIdleCallback メソッドは、アイドル状態で実行するべきコールバック関数を登録するものです。

[51] 第1引数
:コールバック関数 (IdleRequestCallback) です。任意の JavaScript関数を指定できます。 必須です。
[52] 第2引数
省略可能な辞書 IdleRequestOptions >>21 です。 次の辞書メンバーを指定できます。
[53] timeout
タイムアウト処理の実行前に最低限待つべき時間をミリ秒単位で指定できます。 unsigned long です >>21辞書メンバーとしては必須ですが、辞書自体を省略した時の既定値はタイムアウト無しとなります。 なお、この指定は最低限の待ち時間であり、Webブラウザーは状況に応じて更に長く待つことも認められています。

[62] 指定されたコールバック関数は、アイドル状態になると、実行されます。 ただし、 timeout が指定された場合には、 指定時間内に実行できなかった場合にタイムアウトとして実行されます。 通常の実行かタイムアウトの実行かは、コールバック関数引数として与えられる IdleDeadline オブジェクトdidTimeout IDL属性で判断できます。

[54] このメソッドは、ハンドルを返します。これは今回のコールバック関数の登録を表すもので、 cancelIdleCallback の実行時に指定するものです。 unsigned long です >>21


[30] Window インターフェイスrequestIdleCallback メソッドは、次のようにしなければなりません >>21

  1. [31] コールバックを、必須の第1引数を IdleRequestCallback と解釈した結果に設定します。
  2. [32] オプション群を、省略可能な第2引数を IdleRequestOptions と解釈した結果に設定します。
  3. [33] を、文脈オブジェクトに設定します。
  4. [34] アイドルコールバック識別子を、 1 インクリメントします。
  5. [35] ハンドルを、アイドルコールバック識別子に設定します。
  6. [36] (ハンドル, コールバック) を、 アイドル要求コールバック群のリストpush します。
  7. [37] ハンドルを返します。

[38] 引き続き、並列に、次のようにしなければなりません >>21

  1. [39] オプション群null ではなく、 オプション群timeoutなら、
    1. [40] オプション群timeoutミリ秒分、待ちます。
    2. [41] このアルゴリズムの開始時刻 + オプション群timeoutミリ秒、よりも小さなこのアルゴリズムの他の実行が未完了なら、 それを待ちます。
    3. [42] 利用者エージェント定義の時間、待ちます。 これは電力消費の最適化の余地を利用者エージェントに与えるものです。
    4. [43] タスクをキューに追加します。
      処理
      1. [44] ハンドルについて、 アイドルコールバックタイムアウト呼び出しアルゴリズムを実行します。
      タスク源
      アイドルタスクタスク源

Window インターフェイス cancelIdleCallback メソッド

[55] Window オブジェクトcancelIdleCallback メソッドは、登録済みのコールバック関数の実行を取り消すものです。

[56] 第1引数
登録時に requestIdleCallback メソッドが返したハンドルを指定します。

[57] 該当するものが既に実行された場合や、該当するものがない場合には、何も起こりません。

[58] ハンドルは、 setTimeoutsetInterval とは別に管理されています。

[59] 一度利用されたハンドルが (同じ Window で) 再利用されることはありません。 未使用のハンドルcancelIdleCallback されても、その後 requestIdleCallback で利用されることはあり得ます。 その場合でも改めて cancelIdleCallback しない限り普通に実行されます。


[46] Window インターフェイスcancelIdleCallback メソッドは、次のようにしなければなりません >>21

  1. [47] ハンドルを、必須の第1引数を unsigned long として解釈した結果に設定します。
  2. [48] を、文脈オブジェクトに設定します。
  3. [49] アイドル要求コールバック群のリストから、 ハンドルハンドルの項目を(あれば)削除します。
  4. [50] 走らせられるアイドルコールバック群のリストから、 ハンドルハンドルの項目を(あれば)削除します。

処理

[27] Window は、 アイドル要求コールバック群のリスト (list of idle request callbacks) を持ちます。 初期状態は空です。 >>21

[28] Window は、 走らせられるアイドルコールバック群のリスト (list of runnable idle callbacks) を持ちます。 初期状態は空です。 >>21

[60] この両リストは、 requestIdleCallbackcancelIdleCallback の他、アイドル期間の開始や、 IdleRequestCallback を実行する各アルゴリズムから参照・変更されます。

[29] Window は、 アイドルコールバック識別子 (idle callback identifier) を持ちます。 初期状態は 0 です。 >>21 requestIdleCallback から参照・変更されます。

歴史

[1] Re: setImmediate usage on the web (Ross McIlroy 著, 版) https://lists.w3.org/Archives/Public/public-web-perf/2015Jun/0113.html

[2] Cooperative Scheduling of Background Tasks - Google ドキュメント ( 版) https://docs.google.com/document/d/1ZgYOBi_39-N6AbjL99qesiDagaSTbpN0R6CrSVK8NE4/edit?pli=1#

[3] [RequestIdleCallback] Editor's Draft of requestIdleCallback spec (Ross McIlroy 著, 版) https://lists.w3.org/Archives/Public/public-web-perf/2015Jul/0014.html

[4] Cooperative Scheduling of Background Tasks ( 版) https://w3c.github.io/requestidlecallback/

[5] Cooperative Scheduling of Background Tasks ( ( 版)) http://www.w3.org/TR/2015/WD-requestidlecallback-20150917/

[6] Cooperative Scheduling of Background Tasks ( 版) http://www.w3.org/TR/2015/WD-requestidlecallback-20150918/

[7] Clamp timeRemaining() to 5 microsecond resolution. · w3c/requestidlecallback@241decc ( 版) https://github.com/w3c/requestidlecallback/commit/241decc5b2e52b7b6b83a1de42203b4576a47d64

[8] Cooperative Scheduling of Background Tasks ( 版) http://www.w3.org/TR/2015/WD-requestidlecallback-20150924/

[9] Cooperative Scheduling of Background Tasks ( 版) http://www.w3.org/TR/2015/WD-requestidlecallback-20150925/

[10] Cooperative Scheduling of Background Tasks ( 版) http://www.w3.org/TR/2015/WD-requestidlecallback-20150929/

[11] Cooperative Scheduling of Background Tasks ( 版) http://www.w3.org/TR/2015/WD-requestidlecallback-20151125/

[12] Cooperative Scheduling of Background Tasks ( 版) http://www.w3.org/TR/2015/WD-requestidlecallback-20151209/

[13] Cooperative Scheduling of Background Tasks ( 版) https://www.w3.org/TR/2016/WD-requestidlecallback-20160204/

[14] Cooperative Scheduling of Background Tasks ( 版) https://www.w3.org/TR/2016/WD-requestidlecallback-20160225/

[15] associate rIC callbacks with Window · w3c/requestidlecallback@311cccb ( 版) https://github.com/w3c/requestidlecallback/commit/311cccb16237c58b4bdb1ed665fb36702ecafd5a

[16] Cooperative Scheduling of Background Tasks ( 版) https://www.w3.org/TR/2016/WD-requestidlecallback-20160428/

[17] Allow arbitrary inter-document callback ordering · w3c/requestidlecallback@cac526a ( 版) https://github.com/w3c/requestidlecallback/commit/cac526ae7057d6958c3be82b62026a3dbccca04b

[18] privacy section ( (igrigorik著, )) https://github.com/w3c/requestidlecallback/commit/468fa6df94b00a54814dc4cf414b556fa41295d3

[19] Cooperative Scheduling of Background Tasks ( ()) https://www.w3.org/TR/2016/WD-requestidlecallback-20160517/

[20] Using requestIdleCallback | Web Updates - Google Developers () https://developers.google.com/web/updates/2015/08/using-requestidlecallback

[22] w3c/requestidlecallback: Cooperative Scheduling of Background Tasks () https://github.com/w3c/requestidlecallback/

[23] consider work beyond other event loops (igrigorik著, ) https://github.com/w3c/requestidlecallback/commit/3a69ac324fdf9c4cc0fd5b7e249d2df680ee0a79

[24] Incorporate feedback (#50) (igrigorik著, ) https://github.com/w3c/requestidlecallback/commit/9f684e30b2c536db9038430a9e9d286da5a28295

[25] requestIdleCallback - Web APIs | MDN () https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback

[26] 1198381 – Implement requestIdleCallback () https://bugzilla.mozilla.org/show_bug.cgi?id=1198381

[71] Cooperative Scheduling of Background Tasks () https://www.w3.org/TR/2016/WD-requestidlecallback-20161221/

[63] Using requestIdleCallback  |  Web  |  Google Developers () https://developers.google.com/web/updates/2015/08/using-requestidlecallback

[64] Cooperative Scheduling of Background Tasks () https://www.w3.org/TR/2017/WD-requestidlecallback-20170103/

[65] Cooperative Scheduling of Background Tasks: implementation report () https://w3c.github.io/test-results/requestidlecallback/

[66] Cooperative Scheduling of Background Tasks () https://www.w3.org/TR/2017/CR-requestidlecallback-20170131/

[67] Call for Exclusions: Cooperative Scheduling of Background Tasks (Coralie Mercier著, ) https://lists.w3.org/Archives/Public/public-web-perf/2017Feb/0000.html

[68] Align with w3c/hr-time#47 (plehegar著, ) https://github.com/w3c/requestidlecallback/commit/eff3150172f2c4c1054aa9cb838559988c737fe9

[69] Address comments (rmcilroy著, ) https://github.com/w3c/requestidlecallback/commit/994f6a8e002035ee78c5c8cdab0f595b885e4837

[70] Address feedback on timeRemaining method. by rmcilroy · Pull Request #58 · w3c/requestidlecallback () https://github.com/w3c/requestidlecallback/pull/58

[72] Cooperative Scheduling of Background Tasks () https://www.w3.org/TR/2017/PR-requestidlecallback-20171010/

[73] Integrate with requestIdleCallback (rmcilroy著, ) https://github.com/whatwg/html/commit/01787ee712a7803e64e0da6ac9644a5e6b8d2cca

[74] Start an idle period more often (rmcilroy著, ) https://github.com/whatwg/html/commit/4fd4d3df700ecf9d00962fbda760a06014175728