2012-01-13 107 views
18

以下兩行之間是否存在速度/效率差異?使用「:not」和「.not()」選擇器之間的性能差異?

$("table td:not(:first-child)") 

$("table td").not(":first-child") 

我認爲第一個會更好,因爲它是刪除對象,但有一個實際的差異,是它巨大的。

謝謝

+0

您是否嘗試過測量它? – 2012-01-13 04:09:42

+7

http://jsperf.com/jquery-css3-not-vs-not – 2012-01-13 04:10:40

+0

這可能更多我的問題我不確定如何準確測量它。我會認爲一個較小的頁面不會有問題,但它在什麼時候會產生不同? – kwelch 2012-01-13 04:11:03

回答

24

jsperf測試中可以看出,:not平均快一倍。總的來說,雖然這個性能可能只是整個執行時間的一小部分。

jQuery的文檔狀態:

的。不是()方法將結束爲您提供比推複雜的選擇或變量成更可讀 選擇:不() 選擇濾波器。在大多數情況下,這是一個更好的選擇。

所以真的是由你來決定是否你獲得的秒的分數超過了可讀性。

+0

我希望我可以選擇兩者作爲答案,因爲你們都以不同的理由回答了問題。 – kwelch 2012-01-13 04:31:02

+0

+1,因爲它幫助我理解了jsperf上的圖形。我一直在向後閱讀它。 – Richard 2012-06-11 13:28:18

+1

另外,可讀性也有點個人化。我的可讀性沒有問題:不是。特別是與我看到的其他代碼相比,它們的可讀性要差得多。 – rooby 2014-04-23 05:58:32

13

取決於瀏覽器。

瀏覽器支持querySelectorAll將獲得與性能的提升...

$("table td:not(:first-child)") 

...因爲它是一個有效的選擇。舊版瀏覽器(IE7及更低版本)不會。

雖然你需要小心:not()選擇器。 jQuery(Sizzle)使用非標準選擇器擴展它,因此很容易中斷qSA

相關問題