选择多个项目时的jQuery性能

Posted

技术标签:

【中文标题】选择多个项目时的jQuery性能【英文标题】:jQuery performance when selecting multiple items 【发布时间】:2011-01-09 08:01:54 【问题描述】:

这更像是一个好奇的问题。执行以下操作时:

$('.selector1, .selector2').doSomething()

jQuery 是完全遍历 DOM 两次以获取与每个选择器匹配的每组对象,还是在一次遍历 DOM 中找到所有元素?

【问题讨论】:

我不这么认为,因为从我在核心中看到的内容来看,匹配是在各种节点属性(nodeName、NodeType、id 等)上使用正则表达式完成的。所以任何单个选择器都会产生一次 DOM 迭代.但是,我对此不是 100% 肯定的,所以我会遵从其他更熟悉内部结构的人 :-) 实际上这个例子很糟糕,因为<selector2> 节点在 html 中不存在 :) 我想你要做的是找到选择器引擎 Sizzle,你可以看看它的源代码:github.com/jeresig/sizzlegithub.com/jeresig/sizzle/blob/master/sizzle.js @KARASZI 'doh!被一个错字挫败!我会解决的。 ;o) 【参考方案1】:

我认为它使用本机浏览器功能来找到它,使用:

document.getElementsByClassName()

【讨论】:

【参考方案2】:

这真的取决于浏览器。在较新的浏览器中,它将使用 document.querySelectorAll 进行任何 DOM 查询(在后台调用 document.getElementsByClassName 用于类)。在不支持此功能的旧浏览器中,它必须自己解决,这显然会更慢。

一般来说,您应该首先通过 id 查找内容(或至少缩小范围)。类和标签名称将是下一个速度。基本上,原生支持的 DOM 操作是最好的。

【讨论】:

听起来在大多数情况下,每次选择器都会遍历 DOM。虽然它遍历 DOM 的方式会根据选择器的类型(元素、ID 和类)而有所不同? 是的,它将使用正则表达式来拆分您的所有查询并一次执行一个。不过,我不会担心类或 id 的性能。

以上是关于选择多个项目时的jQuery性能的主要内容,如果未能解决你的问题,请参考以下文章

html jQuery选择多个项目

使用modelformset_factory保存请求POST时的性能问题

如何使用 Jquery 更改按钮单击时的 django 外键对象文本选择字段?

带有“N”列的jQuery“选择多个”

使用多个 Docker 容器 VS 标准节点集群时的性能和可靠性

在不真正更改数据的情况下发出多个提交时的性能影响