我試圖在頁面中找到一些簡單的客戶端性能調整,每頁接收數以百萬計的月度頁面瀏覽量。我擔心的一個問題是使用CSS通用選擇器(*
)。通用選擇器的性能影響是什麼?
作爲一個例子,考慮像一個非常簡單的HTML文件如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Example</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
</head>
<body>
<h1>This is a heading</h1>
<p>This is a paragraph of text.</p>
</body>
</html>
通用選擇將應用上述聲明到body
,h1
和p
元件,因爲這些是在唯一的文件。
在一般情況下,我會看到一個規則更好的性能,如:
body, h1, p {
margin: 0;
padding: 0;
}
或者將這種具有完全相同的淨效應?
通用選擇器是否執行了我可能不知道的更多工作?
我意識到這個例子中的性能影響可能非常小,但我希望學習一些可能會導致在現實世界中更顯着的性能改進的東西。
我不打算在文檔中稍後使用其他樣式覆蓋通用選擇器規則中的樣式 - 即將其用作快速和髒重置樣式表。我實際上試圖完全按照我的意圖使用通用選擇器 - 將規則集應用於文檔中的所有元素,一勞永逸。
最終,我希望確定是否有一些內在的普遍選擇性慢,或者如果它只是由於猖獗的濫用只是一個壞的說唱。如果* { margin: 0; }
字面上相當於body, h1, p { margin: 0; }
,那麼這將回答我的問題,我會知道去與前者,因爲它更簡潔。如果沒有,我想了解爲什麼通用選擇器執行速度更慢。
從性能的角度來看,什麼時候最好全局禁用(或啓用)_everything_的特性才能最終重新設置?學習瀏覽器的默認設置不會花費很長時間 - 您可以從「重置」CSS文件中獲得提示,但我不會真正使用它。開放源代碼瀏覽器具有可以查看的開源CSS默認值。 – reisio 2010-06-01 18:03:53
我不確定你是否理解我的問題。我不打算重置,然後在此重新應用樣式,而是將規則應用於頁面上的每個元素。我的問題是使用通用選擇器在技術上是否相同,因爲它是單獨選擇每個元素,或者由於任何原因導致性能損失。 – Bungle 2010-06-01 23:06:57
由於顯而易見的原因,'*'並不等同於'body,h1,p'。 * only *之所以執行得更慢是因爲您將樣式應用於所有內容,而其他選擇器將您限制爲DOM中特定的元素子集。但真正的問題是,瀏覽器會因應用太多的樣式而變得反應遲鈍?我非常懷疑它。另見:[* {box-sizing:border-box} FTW](http://paulirish.com/2012/box-sizing-border-box-ftw) – BoltClock 2012-07-23 08:08:43