2011-05-18 65 views
7

如果我知道DOM中至多有1個這樣的對象,我應該總是追加:首先加載選擇器以加速查找?我假設選擇引擎一找到1個匹配元素就會停下來,但我不確定過濾器是否真的讓事情變慢了一點。確實指出:首先在jQuery選擇器幫助性能?

+0

我對此表示懷疑。我會想象它會獲取所有元素,然後檢查它們是否是父容器中的第一個元素。 (從右到左)。 – Raynos 2011-05-18 19:24:48

回答

6

不,因爲:first不是標準的CSS僞類,並且使用它會導致您的選擇器不會被傳遞到本地querySelectorAll()支持瀏覽器實現的DOM函數(假設您不使用任何其他僅用於jQuery的選擇器語法)。

jQuery將採用整個選擇器並自行解析(最有可能使用Sizzle),這比讓瀏覽器執行工作慢得多。

+0

當然,它不會太慢,人眼可以觀察到它,但理論上**它會損害性能而不是幫助。再次,這隻適用於瀏覽器的CSS引擎支持選擇器,因此'querySelectorAll()'。 – BoltClock 2011-05-18 19:29:08

+1

給你的評論:如果你嘗試調試一個頁面,其中使用':first'僞類選擇器,就Developer Tools of Chrome而言,你可以在「腳本」選項卡中啓用「暫停未捕獲的例外」按鈕(在底端)。在使用':first'的每個選擇中,您會在'querySelectorAll'中看到異常(請參見[here](http://www.trirand.com/blog/?page_id=393/bugs/small-performance-improvements-in-selector) /#p26631))。在很多情況下,':first'可以快速替換爲':first-child'或':n-type-1(1)'。 ':first'的一個用法並不是很慢,但是在循環中可以填充不同。 – Oleg 2012-06-07 20:27:12

0

一種做法幾乎如此;您指定的選擇器越多,引擎驗證的就越多。

因此,就你而言,如果你知道它只有一個,不要指定它。

但是在下面的聲明中,比如100,你甚至不會注意到它。