安定状態

安定状態、同期区間 (Web)

[34] 画像媒体などの読み込みは、スクリプトが終了した後の安定状態において実行される同期区間として定義されています。 この安定状態を提供する処理はマイクロタスクとして定義されています。

仕様書

用法

[30] 安定状態を待つアルゴリズムは、ネットワークアクセスが発生するものなどです。 スクリプトがそのようなアルゴリズムを実行した直後に同期的に同期区間を実行してしまうと、 スクリプトのその後の部分による操作などで無駄になってしまう可能性があり、 一連のスクリプトを実行し終わるまで遅延させるというのが目的のようです。

[31] 例えば img 要素src 属性を設定すると画像の読み込みが行われますが、その直後に src 属性srcset 属性スクリプトから操作すると元の画像の読み込みは無駄になります。 ですから、当該スクリプトが終わってから読み込みが始まります。

[35] 安定状態を待つ (await a stable state) とは、 安定状態を提供するマイクロタスクマイクロタスクキューに入れることをいいます >>2

[36] あるアルゴリズム安定状態を提供 (provide a stable state) するマイクロタスク>>2

  1. [37] まずそのアルゴリズム同期区間を実行し、
  2. [38] 次に非同期的アルゴリズムの続きがあれば、それも実行します。

[39] 実際の処理の内容は、アルゴリズムによります。アルゴリズムによっては、同期区間のみで、 非同期的な続きがないこともあります。

[41] かつては次のように規定されていました。

[4] 安定状態を提供 (provide a stable state) する場合は次のように処理します。

[7] 同期区間DOM を変化させたり、スクリプトを実行したり、 その他副作用を起こすことはありません。 >>3

[8] 安定状態は次の場合に提供されます。

[33] >>32 により削除。

非同期的に安定状態を待つ算法

[12] 次の算法は、その途中で並列で実行された後安定状態を待つ部分があり、 同期区間の処理が規定されています。更にその後に非同期算法が続くものもあります。

[20] かつてはこれらをどのような順序で実行するかは特に規定されていませんでした。

[29] かつては、安定状態マイクロタスクとして実装することも可能ですが、 マイクロタスクはキューによって逐次的に実行されるのに対し、 安定状態に実行される各手順は並列で実行できるものであるから、 仕様上別の概念としていたようです >>26。ただし実際のWebブラウザーは逐次的に実行する実装になっているようです。

[19] スタイルシート@import などの参照を持つ場合にスタイルシートスクリプトから参照可能にしなければならないタイミングは、 イベントループ中の次のレンダリングの際、とされており <http://www.whatwg.org/specs/web-apps/current-work/#style-sheet-ready>、 実質的に、安定状態の最後に行うということになります。

歴史

[40] >>32安定状態の提供が独自の概念からマイクロタスクに変更されました。