在jquery选择器中指定:first是否有助于提高性能?

在jquery选择器中指定:first是否有助于提高性能?,jquery,jquery-selectors,Jquery,Jquery Selectors,如果我知道在我的DOM中最多有一个这样的对象,我是否应该始终将:first附加到选择器以加快查找?我假设选择引擎在找到一个匹配元素后会立即停止,但我不确定过滤器是否真的会让事情慢一点;指定的选择器越多,引擎验证的次数就越多 因此,在您的情况下,如果您知道它只有一个,请不要指定它 但是对于下面的声明,比如100,您甚至不会注意到它。不,因为:首先不是一个标准的CSS伪类,使用它将导致您的选择器不会被传递到由支持浏览器实现的本机querySelectorAll()DOM函数(假设您不使用任何其他只使

如果我知道在我的DOM中最多有一个这样的对象,我是否应该始终将:first附加到选择器以加快查找?我假设选择引擎在找到一个匹配元素后会立即停止,但我不确定过滤器是否真的会让事情慢一点;指定的选择器越多,引擎验证的次数就越多

因此,在您的情况下,如果您知道它只有一个,请不要指定它


但是对于下面的声明,比如100,您甚至不会注意到它。

不,因为
:首先
不是一个标准的CSS伪类,使用它将导致您的选择器不会被传递到由支持浏览器实现的本机
querySelectorAll()
DOM函数(假设您不使用任何其他只使用jQuery的选择器语法)


jQuery将使用整个选择器并自行解析它(很可能是使用Sizzle),这比让浏览器完成工作要慢很多。

我对此表示怀疑。我想象它获取所有元素,然后检查它们是否是父容器中的第一个元素。(从右到左)。当然,它的速度不会太慢,以至于人眼可以观察到它,但从理论上讲,它会损害性能,而不是起到帮助作用。同样,这只适用于浏览器CSS引擎支持选择器的情况,因此
querySelectorAll()
。请注意:如果您尝试调试页面,其中
:首先使用了
伪类选择器,对于Chrome的开发工具,您可以在“脚本”选项卡“暂停未捕获的异常”中启用按钮(在底部)。在每次选择
:first
时,您都会在
querySelectorAll
中看到异常(请参阅)。在许多情况下,
:first
可以替换为
:first child
:第n个类型(1)
将很快被替换。
:first
的一个用法并不是很慢,但在循环中可以填补差异。