повторить $ () везде или объявить один раз и использовать повторно? - PullRequest
3 голосов
/ 04 августа 2011

Используя jQuery, если я пишу код, подобный этому

$('blah').doSomething(); 
//bunch of code
$('blah').doSomethingElse();
//bunch of code
$('blah').doOtherStuff();

Создается ли новый объект jQuery каждый раз, когда я говорю $ ('blah')?

Если так, будет ливместо этого он сокращает накладные расходы на создание объекта:

var blah = $('blah');
blah.doSomething(); 
//bunch of code
blah.doSomethingElse();
//bunch of code
blah.doOtherStuff();

Имеет смысл?

1 Ответ

6 голосов
/ 04 августа 2011

Абсолютно верно!

Почему Cache

Еще одним преимуществом кэширования является удобство сопровождения кода. Если селектор находится только в одном месте, изменить его нужно только в одном месте. Поверьте мне, это облегчает жизнь при поддержке кода.

Сеть

Хотя вы можете пойти еще дальше (там, где это уместно) и объединить свои звонки:

$('blah')
.doSomething()
.doSomethingElse()
.doOtherStuff();

Это немного лучше по двум причинам. Во-первых, вы не используете дополнительную переменную, поэтому вы экономите небольшое количество памяти. Во-вторых, язык не выполняет поиск для каждого использования идентификатора, поэтому он быстрее.

Итак, почему люди все еще [сверх] используют $()

Одна из причин, по которой люди используют много $(), заключается в том, что они не знают ничего лучше.

Другая причина в том, что раньше выбор элементов был медленнее. Но, как и в большинстве случаев в браузере, запросы к объектам с помощью селекторов быстро оптимизируются (document.querySelectorAll), что означает, что кешировать или не кешировать не так уж и сложно, поэтому, возможно, с учетом этого они позволяют себе не кешировать .

Наконец, существуют тесты ( один два из быстрого Google), которые пытаются утверждать, что это не имеет значения или, может быть, даже быстрее не кешу. Проблема с большинством этих тестов и почему я предлагаю вам очень осторожно делать выводы из них, заключается в том, что DOM в этом примере не является реальным; это слишком упрощенно. Во-вторых, селекторы также упрощены. Поэтому, конечно, запросы будут молниеносными, и кэширование не будет иметь большого значения, но я не считаю их окончательными.

Тем не менее, если ваш пример похож на пример тестов, то, возможно, вы можете сделать свои собственные косвенные выводы, и кэширование может быть просто неудобством.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...