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

Posted

技术标签:

【中文标题】使用 ":not" 和 ".not()" 选择器之间的性能差异?【英文标题】:Performance differences between using ":not" and ".not()" selectors? 【发布时间】:2012-02-09 09:00:44 【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

jsperf.com/jquery-css3-not-vs-not 这可能是我的更多问题,我不确定如何准确测量它。我会假设较小的页面没有问题,但它在什么时候会有所不同? 可读性方面存在明显的差异。您的申请中是否存在其他类型的差异? 我同意我真的很喜欢可读性,但我想确保我不会因为可读性而失去显着的性能。 我发现第二个更容易阅读,所以如果我发现特定页面上的性能问题,我会从这种方式开始并重新审视它。 【参考方案1】:

取决于浏览器。

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

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

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

您需要小心:not() 选择器。 jQuery (Sizzle) 使用非标准选择器对其进行了扩展,因此很容易破坏 qSA

【讨论】:

【参考方案2】:

从jsperf 测试中可以看出,:not 的平均速度大约是两倍。总体而言,尽管此性能可能只占您整体执行时间的一小部分。

jquery 文档状态:

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

因此,您实际上可以决定您获得的几分之一秒是否超过可读性。

【讨论】:

另外,可读性也有点个人化。我真的对 :not 的可读性没有问题。特别是与我看到的程序员所做的其他事情相比,可读性要差得多。 我在上面的 jsperf 链接中收到“内部服务器错误”。也许是different revision?

以上是关于使用 ":not" 和 ".not()" 选择器之间的性能差异?的主要内容,如果未能解决你的问题,请参考以下文章

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

已安装wxpython,但是执行命令ride.py时显示wxpython not found

OAuthException using Socialite with facebook - "message": "必须使用活动访问令牌来查询有关当前用户的信息。&qu

为 Python 3 安装 IPython 时出错:sys_platform == "darwin" 和 platform_python_implementation == &qu

文件流:"fopen","fclose",“ftell”"fseek","fgets","fprintf&qu

如何修复 UnhandledPromiseRejectionWarning: CastError: Cast to number failed for value "undefined&qu