2012-09-01 26 views
3

大家都說,* { ... }選擇器非常慢。但它真的有多慢?*真的有多慢?

我總是儘量避免它,但有時它是非常有用的。例如:* + h1 { margin-top 1em; }

回答

6

說得很簡單:通用選擇器*只有頁面上的元素一樣慢。

由於right-to-left matching browsers take each element and match it against all candidate rules,每個元素將匹配*就好了。它本身並不會損害性能,但是如果頁面中有很多元素或者非常複雜的DOM,那就是它聲稱緩慢的地方,但即使如此,它也不會顯着降低瀏覽器的性能。

例如,像* + h1這樣的東西是合理的,因爲如果要考慮匹配性能,那麼從右到左匹配的瀏覽器將首先在h1元素上測試該選擇器,然後檢查是否有任何元素髮生在他們之前(這真的不需要太多的努力,因爲*基本上是保證匹配)。

您也不妨看看this answer of mine到類似的問題有關* + *(這是普遍選擇!)。

+0

如果您因爲'*'而接到'* + h1'的投訴,那麼'h1:not(:first-child)'是等價的。然後,您可以決定是否要犧牲微秒的性能或整個瀏覽器用戶羣(IE7和8不支持':not()')。 – BoltClock

+0

非常好的答案,並感謝那個聰明的'h1:不(:first-child)'。 – buschtoens