2014-09-10 3 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

Нет смысла искать один и тот же набор элементов три раза, лучше сохранить его вместо локальной переменной! –

+0

Если появляется несколько раз, я стараюсь поднять его. Я делаю это для всего, даже простых строк. Также '$ (". Foo "). DoOneThing(). DoAnotherThing(). DoSomethingElse();' будет работать слишком lol. <3 цепочки. – RaphaelDDL

+1

Просто немного плункер, чтобы показать, как два разных способа будут вести себя с большим количеством операций. http://plnkr.co/edit/lb3Cew3j1p5HE5goCgqd?p=preview – Pr0gr4mm3r

ответ

3

Использование var $foo = $(".foo");

Использование $(".foo") несколько раз заставит JQuery повторить поиск. Похоже, что jQuery не кэширует селекторов, и даже если это было сделано, лучше быть умным и не полагаться на кого-то другого.

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

+1

Я не думаю, что jQuery кэширует селектора. Если это так, то это должна быть какая-то серьезная магия, так как дом мог меняться и все испортить. – m59

+0

@ m59 хорошая точка. изм. – kornieff

+2

Это правильный ответ для варианта использования OP, но стоит отметить, что «сохранение» объекта jQuery в переменной будет кэшировать выделение во время поиска, пытаясь использовать его снова после изменений DOM, может дать вам неожиданное Результаты. – nrabinowitz

1

Сохранение результата запроса в переменной рекомендуется в большинстве ситуаций, когда запрос является repetetive. В зависимости от вашей ситуации вы также можете так последовательно выполнять функции.

$(".foo").doOneThing().doAnotherThing().doAnotherThing(); 
Смежные вопросы