WebKit ブラウザーには、スタイル レンダリングの最適化手法が組み込まれているため、「ページ上の要素の約 60% についてスタイルを一致させる必要さえありません」。
ただし、「スタイルシートのどこかで兄弟セレクターが検出された場合、その最適化はページ全体で完全にオフになります...これには、+
セレクターと および のようなセレクター:first-child
が含まれ:last-child
ます。」
この最適化を無効にするセレクタータイプの完全なリストを知っている人はいますか?
--
より詳しい情報
最適化については、ブラウザーの内部構造に関する Tali Garsiel の研究: How Browsers Workで説明されています。
明らかにブラウザ コードを作成したDave Hyattからの兄弟セレクターに関する完全な引用は次のとおりです。これには、+ セレクターと、:first-child や :last-child などのセレクターが含まれます。
その引用は、 Hyattが 2005 年に書いた記事から来ているようです。以下で、彼はそれについてより詳細に説明しています (以前と同じソース)。
要素に適用される一連の宣言を計算します. この最適化の実際の結果として、ページ上の要素の約 60% のスタイルを一致させる必要さえありません. 最適化の背後にあるアイデアは、ページ内の 2 つの要素がいつ移動するかを認識することです. DOM (およびその他の状態) 検査を通じて同じスタイルを保持し、可能な限りこれら 2 つの要素間でフロント エンドのスタイル情報を共有するだけです。」Nate Koechley によるこの記事では、アルゴリズムについて詳しく説明しています。彼は次のようにまとめてい
ます。ブラウザの根性を理解し、最良の方法を選択するのに役立ちます。」ハイアットは、このW3C メーリング リスト アーカイブでも最適化について説明しました
また、Ryan Kinal からのスタック チャットでも簡単に取り上げられました。
私は特に知りたいと思っています:
子セレクターも最適化をオフにするかどうか
Trident/IE が同様の最適化を使用しているかどうか
レンダリング パフォーマンスにどれほど大きな違いがあるかを示すテストが存在するかどうか