爲了保持我的移動Web應用程序的精簡和高效,我試圖在任何給定時間限制DOM上元素的數量。我打算限制使用DOM元素的一種方法是使用僞元素:before
和:after
來儘可能生成內容。是否使用CSS生成的內容(即僞元素)比添加更多DOM元素更高效(即更快解析/渲染)?
例如,而不是表示與元數據的列表項是這樣的:
<dd class="item">
<div class="name">Name</div>
<div class="desc">Description</div>
<div class="location">Location</div>
<div class="genre">Genre</div>
</dd>
我可以表示它是這樣的(&使用content:
屬性來顯示所述元數據):
<dd class="child"
data-name="Name"
data-desc="Description"
data-location="Location"
data-genre="Genre">
</dd>
所以,一個DOM元素具有數據屬性而不是5個單獨的元素,可以說是更清晰的標記。
演示在這裏:http://jsfiddle.net/quc8b/2/
請問這種技術實際上提高性能?我的想法是,用更少的DOM元素,javascript應該更快地解析,我應該能夠更快地添加/刪除列表項節點。但是渲染(即繪畫,佈局,迴流)發生得更快嗎?換句話說,CSS生成的內容比傳統元素和文本節點更快或更高效地進行渲染/解析?
瀏覽器如何內部處理渲染樹和文檔樹中CSS生成的內容對我來說是未知的(陰影DOM可能?)。有沒有討論過這個問題的文章?
在DOM中不存在僞元素,直到CSS規則將其插入元素的前後。這意味着額外的DOM操作,儘管不需要額外的邏輯來匹配選擇器本身。 – ricardohdz
從語義上講,數據的兩種表示之間存在很大差異。第一個表示一個名稱,描述,位置和流派的定義。第二個表示一個定義。就是這樣。如果沒有別的,通過CSS呈現內容當然是不可訪問的。 –
@ricardohdz但是這種DOM操作方法比通過JavaScript處理更有效嗎? – BigMacAttack