Skip to main content

Module repaint_scope

Module repaint_scope 

Source
Expand description

アニメーション/トランジションで変化したプロパティが、 再レイアウトを要するか / 再ペイントだけで足りるかの判定。

§背景

CSS アニメーションは 1 フレームごとに parse_and_layout(HTML 再パース + 2403 ルール再カスケード + レイアウト)を丸ごと呼んでいた。実サイトでは これが 10 秒以上かかるため、描いたフレームが画面に出る前に次のレイアウトが 始まり、ページが永久に収束しなかった。

しかし実際にアニメーションされるプロパティの大半(opacity / color / background-color / transform 等)はボックスの大きさも位置も変えない。 これらだけが変化したフレームは、算出値を差し替えて再ペイントするだけでよい。

§安全側の既定

分類が不明なプロパティは再レイアウト側に倒す。再ペイントで済ませてよいものを 再レイアウトしても「遅いだけで絵は正しい」が、逆に再レイアウトが必要なものを 再ペイントで済ませるとレイアウトが崩れたまま画面に残るため。

グローバル状態にもハードウェアにも依存しない純粋ロジックのみで構成する。

Enums§

RepaintScope
このフレームの変更を反映するのに必要な処理の範囲。
ScopeError
判定の引数が不正だった場合のエラー。

Constants§

PAINT_ONLY 🔒
ボックスの寸法・位置・フロー構造に影響せず、見た目だけを変えるプロパティ。 ここに載っているものだけが再ペイント扱いになる。

Functions§

is_paint_only
プロパティ 1 つが再ペイントだけで反映できるかを返す。
scope_for
このフレームで変化したプロパティ名の集合から、必要な処理範囲を決める。