Javascript 多次使用jQuery$()操作符是否会影响性能?

Javascript 多次使用jQuery$()操作符是否会影响性能?,javascript,jquery,performance,Javascript,Jquery,Performance,如果我围绕一个元素构建一个jQuery对象一次或多次,会有显著的区别吗?例如: var jEl = $(el); $.each(myArray, function() { jEl.addClass(this); } 与: $.each(myArray, function() { $(el).addClass(this); } 我知道还有其他方法可以避免这个问题,但我的问题是我是否应该只做一次$(el),或者它是否真的无关紧要。这个例子是人为的 解释$(el)在幕后所做的事情的

如果我围绕一个元素构建一个jQuery对象一次或多次,会有显著的区别吗?例如:

var jEl = $(el);
$.each(myArray, function() {
    jEl.addClass(this);
}
与:

$.each(myArray, function() {
    $(el).addClass(this);
}
我知道还有其他方法可以避免这个问题,但我的问题是我是否应该只做一次$(el),或者它是否真的无关紧要。这个例子是人为的

解释$(el)在幕后所做的事情的额外积分

我知道理论上还有更多的工作要做,但我不知道这是否重要。。。如果jQuery缓存了它,或者浏览器在第二次请求时都非常出色,那么它就不值得了

仅供参考:这里有相关的jQuery API链接(我之所以提供此链接,是因为$()对于Google来说不是最简单的东西):


还值得包括这个有用的链接:,其中他的几点集中在保存、链接和正确选择上。

是的,这会影响性能

在第一个示例中,只创建了一个实例

在第二种情况下,将为循环的每个迭代创建一个实例


根据myArray的大小,这可能会导致创建大量无关的实例,这些实例会占用内存。

第一种方法会更快。首先,你每次都要创建一个新的对象,这也取决于你的浏览器、你的页面以及el是什么

如果el是一个字符串(例如“#myname”),那么
$(el)
将“查询”DOM以查找该元素。jQuery在执行查询时相当快,但确实需要一些时间。因此,多次这样做将需要更长的时间


我能得到奖励积分吗?

是的,会有。每次调用$()时,jQuery都会单独搜索DOM中的元素


如果每次搜索需要0.1秒(通常要快得多,但这是一个很容易处理的数字),并且数组中有1000个元素,那么在第二个示例中,这100秒只用于遍历DOM,而在第一个示例中仅为0.1秒。

如果el是字符串,它可能不会执行查询:
$(“”)
,但这与问题无关。是的,我的假设是它是jQuery构造函数的有效字符串。为了澄清,jQuery文档说,如果传入$()的对象是jQuery对象,则返回的对象将是一个克隆,因此是的,它肯定会创建更多实例。即使它创建了更多实例,它们只会进入GC,因为它们是语句的本地对象,因此不会保存内存,对吗?@Scott-这取决于JavaScript引擎如何处理自身清理。一点也不保证。比1秒低多少?