私のモバイルWebアプリをリーンで効率的に保つために、私はいつでもDOM上の要素の数を制限しようとしています。私がDOM要素の使用を制限しようとする1つの方法は、擬似:before
と:after
要素を使用して可能な限りコンテンツを生成することです。例えばより多くのDOM要素を追加するよりも、CSSで生成されたコンテンツ(つまり擬似要素)の使用がより効率的(つまり解析/レンダリングが高速化)されていますか?
はなく、このようなメタデータをリスト項目を表す:
<dd class="child"
data-name="Name"
data-desc="Description"
data-location="Location"
data-genre="Genre">
</dd>
:
<dd class="item">
<div class="name">Name</div>
<div class="desc">Description</div>
<div class="location">Location</div>
<div class="genre">Genre</div>
</dd>
Iは、この(&メタデータを表示するcontent:
プロパティを使用)のようにそれを表すことができ
したがって、5つの別々の要素ではなく、間違いなくクリーンなマークアップではなく、データ属性を持つ1つのDOM要素。
デモ:http://jsfiddle.net/quc8b/2/
この手法では実際にパフォーマンスが向上しますか?私の考えは、より少ないDOM要素でjavascriptがより速く解析されるべきであり、リストアイテムノードをより速く追加/削除できるはずです。しかし、レンダリング(つまり、ペイント、レイアウト、&リフロー)はより速く行われますか?言い換えれば、従来の要素やテキストノードよりも速く、効率的にレンダリング/解析されたCSS生成コンテンツですか?
レンダリングツリーやドキュメントツリーでCSSで生成されたコンテンツをブラウザがどのように内部的に扱うかは、私には分かりません(シャドウDOMは多分?)。これについて議論する記事はありますか?
CSSルールが要素の前後に挿入するまで、疑似要素はDOMに存在しません。これは、セレクタ自体に一致するために追加のロジックは必要ありませんが、追加のDOM操作を意味します。 – ricardohdz
意味的に言えば、データの2つの表現の間には大きな違いがあります。最初は、名前、説明、場所、ジャンルの定義を示します。 2番目は定義を示します。以上です。それ以外の場合は、CSSでコンテンツをレンダリングすることはできません。 –
@ricardohdzしかし、このDOM操作の方法は、javascriptによる操作よりも効率的ですか? – BigMacAttack