Skip to main content

Module pseudo_state

Module pseudo_state 

Source
Expand description

セレクタが動的疑似クラス(:hover / :focus / :active)を参照しているかの判定。

仕様は spec/dynamic_pseudo_states.md

§なぜ必要か

cascade.rs はノード 1 個につきカスケードを 4 回走らせている (通常 / :hover / :focus / :active の事前計算)。 実測で style_tree のノード走査は 358 ノードで約 600 tick かかっており、 セレクタ照合は索引で既に 2.0% まで落ちている(照合はボトルネックではない)。 残っているのはこの 4 倍の固定コスト。

候補ルールが該当の状態を一切参照していなければ、そのパスは走らせなくてよい。

§方針(不変条件 D-1〜D-4)

  • D-1: 結果は従来と完全一致。差分が原理的に生じ得ない場合のみスキップ
  • D-2: 判定対象は候補ルール集合(全ルールへのフォールバック時も同じ)
  • D-3: セレクタの構文だけを見る。DOM 状態には依存しない
  • D-4: 迷ったら「参照している」とみなす(false negative を出さない)

Functions§

matches_state 🔒
:focus の判定に含めるべき別名。
rule_uses_state
ルールのいずれかのセレクタが state を参照しているか。 計算量: O(Sel × Steps × P) — Sel はルール内のセレクタ数。
selector_uses_state
セレクタ全体(チェーンなら全ステップ)が state を参照しているか。
simple_uses_state
単純セレクタ(コンパウンド 1 個)が state を参照しているか。