使用“:not”和“.not()”选择器之间的性能差异?

时间:2012-01-13 04:08:13

标签: jquery jquery-selectors css-selectors

以下两行之间是否存在速度/效率差异?

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

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

我认为第一个会更好,因为它会删除对象,但是它是否存在实际差异并且是实质性的。

由于

2 个答案:

答案 0 :(得分:27)

jsperf测试中可以看出,:not平均速度提高了一倍。总的来说,这种性能可能只是整个执行时间的一小部分。

jquery docs陈述:

  

.not()方法最终会为您提供更多可读性   选择而不是将复杂的选择器或变量推送到:not()   选择器过滤器在大多数情况下,这是一个更好的选择。

所以真的由你决定你获得的一秒的分数是否超过可读性。

答案 1 :(得分:14)

取决于浏览器。

支持querySelectorAll的浏览器可以通过...

获得性能提升
$("table td:not(:first-child)")

...因为它是一个有效的选择器。较旧的浏览器(IE7及更低版本)不会。

您需要小心使用:not()选择器。 jQuery(Sizzle)使用非标准选择器扩展它,因此很容易打破qSA