多次使用jQuery $()运算符会对性能产生影响吗?

时间:2010-12-01 19:42:02

标签: javascript jquery performance

如果我在元素周围或多次构造一个jQuery对象,是否存在显着差异?例如:

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

$.each(myArray, function() {
    $(el).addClass(this);
}

我知道还有其他方法来写这个可能回避这个问题,但我的问题是我是否应该只做一次$(el),或者它是否真的无关紧要。这个例子是人为的。

奖励点用于解释$(el)在幕后的作用。

我知道理论上正在做更多的工作,我不知道的是它是否重要......如果jQuery缓存它或浏览器都非常擅长第二个请求或其他什么,而不是它的价值。

仅供参考:相关的jQuery API链接在这里(我提供的是因为$()对谷歌来说不是最简单的事情):http://api.jquery.com/jQuery/#using-dom-elements

还值得包括这个有用的链接:http://www.artzstudio.com/2009/04/jquery-performance-rules/,他的几个要点围绕着保存,链接和选择。

3 个答案:

答案 0 :(得分:7)

是的,会对性能产生影响。

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

在第二个中,将为循环的每次迭代创建一个实例。

根据myArray的大小,可能会导致创建大量无关实例,这些实例将通过内存进行咀嚼。

答案 1 :(得分:1)

第一种方式会更快。首先,您每次创建一个新对象,这取决于您的浏览器,您的页面以及el ..

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

我获得奖励积分吗?

答案 2 :(得分:1)

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

如果每次搜索需要0.1秒(通常要快得多,但这是一个很容易使用的数字),并且你的数组中有1000个元素,那就是100秒专门用于遍历第二个例子中的DOM,而不是第一次只有0.1秒。