2014-09-10 137 views
3

假设我有一个匹配“.foo”的元素。

<div class="foo"></div> 

我从经验中学到了多次调用查找器的性能,如果我试图多次更改同一个对象。

$(".foo").doOneThing(); 
$(".foo").doAnotherThing(); 
$(".foo").doSomethingElse(); 
// Makes jQuery look for ".foo" three times, bad! 

$foo = $(".foo"); 
$foo.callAllThreeOfTheThingMethodsInThePreviousBlock(); 
// Calls $(".foo") only once, but occupies memory with a jQuery object version of the foo div. 

我的问题是,有多少次你必须留出内存来存放jQuery对象,而不是再次作出了jQuery方法调用之前使用这个取景器?

我问,因为有一天,我让每一个发现者多次调用一个存储的$ object变量;如果我只使用取景器,比如说两三次,我的老板曾经说过要使用取景器而不是存储的物体。你对此有何看法?

+0

三次找到相同的项目是没有意义的,最好将它保存到局部变量中! – 2014-09-10 18:02:48

+0

如果出现不止一次,我倾向于解除它。我为所有事情做到了,即使是简单的字符串。还有'$(“。foo”)。doOneThing()。doAnotherThing()。doSomethingElse();'会工作太大声。 <3链。 – RaphaelDDL 2014-09-10 18:10:47

+1

只需要一小捣蛋器来展示两种不同的方式如何与大量操作相互作用。 http://plnkr.co/edit/lb3Cew3j1p5HE5goCgqd?p=preview – Pr0gr4mm3r 2014-09-10 19:05:47

回答

3

使用var $foo = $(".foo");

使用$(".foo")多时间会让jQuery的重复搜索。看起来jQuery并没有缓存选择器,即使它做到了,最好是自己聪明一点,不要依赖别人。

Does jQuery do any kind of caching of “selectors”?

+1

我不认为jQuery缓存选择器。如果确实如此,那肯定会有些严重的魔力,因为dom可能会改变并且搞砸了一切。 – m59 2014-09-10 18:11:46

+0

@ m59好点。编辑。 – kornieff 2014-09-10 18:17:23

+2

这是OP用例的正确答案,但值得注意的是,将jQuery对象“保存”到变量中会在搜索时缓存选择内容 - 尝试在DOM更改后再次使用它可能会给您带来意想不到的效果结果。 – nrabinowitz 2014-09-10 18:22:22

1

存储在变量中的查询结果在该查询的repetetive多数情况下推荐。 根据您的情况,您也可以像这样继续调用函数。

$(".foo").doOneThing().doAnotherThing().doAnotherThing(); 
相关问题