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

kwe*_*lch 23 jquery css-selectors jquery-selectors

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

$("table td:not(:first-child)")
Run Code Online (Sandbox Code Playgroud)

$("table td").not(":first-child")
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Jam*_*gne 27

jsperf测试中可以看出,平均速度:not是快两倍.总的来说,这种性能可能只占整体执行时间的很小一部分.

jquery文档声明:

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

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

  • 此外,可读性也有点个人化。我对 :not 的可读性没有真正的问题。特别是与我看到的编码人员所做的其他事情相比,可读性要差得多。 (2认同)

小智 14

取决于浏览器.

支持的浏览器querySelectorAll将通过...获得性能提升

$("table td:not(:first-child)")
Run Code Online (Sandbox Code Playgroud)

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

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