[35] [DFN[[RUBYB[[[マイクロタスク]]]@en[microtask]]]]は、 [[Webブラウザー]]における処理の単位で、 [[変異観測器]]や[[表]]の[[整列]]などの処理で用いられています。 * 仕様書 [REFS[ - [7] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-03-28 21:58:58 +09:00]] 版) ]REFS] * 処理モデル ** マイクロタスクチェックポイント [6] [[イベントループ]]の処理の中などで[RUBYB[[[マイクロタスクチェックポイント]]]@en[microtask checkpoint]]の[[アルゴリズム]]が呼ばれます。 [12] [DFN[[RUBYB[[[マイクロタスクチェックポイントを行う]]]@en[perform a microtask checkpoint]]]]時は次のようにし[['''なければなりません''']] [SRC[>>7]]。 [FIG[ = [8] [[マイクロタスクチェックポイントを行っている]]フラグが[[偽]]なら、 == [9] [[マイクロタスクチェックポイントを行っている]]フラグを[[真]]にします。 == [38] [RUBYB[[[カスタム要素チェックポイントを行う]]]@en[perform a custom elements checkpoint]][[アルゴリズム]]を実行します。 == [22] [RUBYB[[[未決の整列について表を整列]]]@en[sort the tables with pending sorts]]します。 == [10] [[スクリプトの閲覧文脈]]が所属している[[関連する類似起源閲覧文脈の単位]]の[[[CODE(DOMi)@en[MutationObserver]]オブジェクトを呼び出し]]します。 ==- [11] これによって[[コールバック]]の[[スクリプト]]が[[発火]]されたりするわけですが、 その際 [[jump to a code entry-point]] [[アルゴリズム]]が呼ばれ、その中で再度この[[算法]]が呼ばれることになるので、 [[マイクロタスクチェックポイントを行っている]]でチェックして再実行しないようにしています。 == [13] [[マイクロタスクチェックポイントを行っている]]フラグを[[偽]]にします。 ]FIG] [34] [DFN[[RUBYB[[[マイクロタスクチェックポイントを行っている]]]@en[performing a microtask checkpoint]]]]フラグは[RUBYB[[[関連同様起源閲覧文脈の単位]]]@en[unit of related similar-origin browsing contexts]]に付随するフラグで、初期値は[[偽]]です。 [SRC[>>7]] [15] [[マイクロタスクチェックポイントを行う]]のは次の場面です。 [FIG[ - [16] [[イベントループ]]の1ステップとして - [17] [[jump to a code entry-point]] ([[スクリプト]]実行) の1ステップとして - [18] [[HTML]] [CODE(HTMLe)@en[[[script]]]] [[要素]]の[[終了タグ]]の処理の1ステップとして ;; [19] [[SVG]] [CODE(XMLe)@en[[[script]]]] [[要素]]でも同様に呼び出されるものと推察されますが、 現時点で [[SVG]] [CODE(XMLe)@en[[[script]]]] [[要素]]の処理モデルを詳細に規定した仕様がありません。 ]FIG] * 歴史 [37] [[マイクロタスク]]は[[変異観測器]]のための仕組みとして [[HTML Standard]] に導入されました。 [REFS[ - [33] [CITE@en[DOM Mutation Events Replacement: When to deliver mutations]] ([[Rafael Weinstein]] 著, [TIME[2011-08-11 09:44:32 +09:00]] 版) - [1] [CITE[IRC logs: freenode / #whatwg / 20120228]] ( ([TIME[2012-03-08 00:01:17 +09:00]] 版)) - [2] [CITE@en[Re: ''''''[''''''dom'''''']'''''' mutation observers and HTML]] ( ([[Olli Pettay]] 著, [TIME[2012-02-18 00:51:23 +09:00]] 版)) - [3] [CITE[IRC logs: freenode / #whatwg / 20120320]] ( ([TIME[2012-03-29 23:32:57 +09:00]] 版)) - [14] [CITE[Bug 17988 – The term microtask should be defined]] ( ([TIME[2012-07-21 17:51:05 +09:00]] 版)) - [21] [CITE@en[Web Applications 1.0 r7597 New feature: sorting tables. The actual sort algorithm isn't done yet, but this should be a good start for first draft reviewers.]] ([TIME[2012-12-27 08:58:00 +09:00]] 版) - [20] [CITE@en[Web Applications 1.0 r7484 The parser should have mutation observers.]] ([TIME[2012-10-24 07:24:00 +09:00]] 版) ]REFS] [23] [CITE@en[Bug 19554 – Needed: An Algorithmic "Hook" For Culling URL.objectURLs with autoRevoke=true]] ( ([TIME[2013-05-30 08:45:57 +09:00]] 版)) [24] [CITE[IRC logs: freenode / #whatwg / 20130528]] ( ([TIME[2013-05-29 23:52:26 +09:00]] 版)) [25] [CITE@en[Bug 22185 – Microtask checkpoint wording is wrong -- and needs abstracting]] ( ([TIME[2013-06-09 01:40:24 +09:00]] 版)) [26] [CITE@en[Web Applications 1.0 r7950 Bring the 'microtask checkpoint' invocation at the end of scripts more into line with implementations, and unrelated editorial fixes.]] ( ([TIME[2013-06-11 05:52:00 +09:00]] 版)) [27] [CITE@en[Bug 22296 – Microtask and promises]] ( ([TIME[2013-09-13 07:31:35 +09:00]] 版)) [29] [CITE[IRC logs: freenode / #whatwg / 20131107]] ( ([TIME[2013-11-09 12:27:06 +09:00]] 版)) * 関連 [36] [[マイクロタスク]]と[[タスク]]は似ていますが、[[タスク]]は[[タスクキュー]]によって順番に処理されるのに対し、 [[マイクロタスク]]はその[[タスク]]の前後などのより細かいタイミングでまとめて処理されます。