Кэширование ссылок jQuery - PullRequest
3 голосов
/ 01 июля 2010

Всегда ли лучше использовать:

var $this = $(this);

Или кэшируется $ (this), и поэтому приведенная выше строка предназначена только для сохранения двух символов?

Ответы [ 2 ]

3 голосов
/ 01 июля 2010

Использование $(this) вызывает как минимум две (и, возможно, более двух) функций и выделяет объект каждый раз, когда вы его используете (потребляя память, которая в конечном итоге должна быть восстановлена). Это все дополнительная работа, если вы просто собираетесь использовать одно и то же. Я бы рекомендовал вызывать его один раз, а затем кэшировать результат (например, внутри функции), а не иметь дюжину строк $(this).foo(); $(this).bar();.

$ - это псевдоним для функции jQuery, который выглядит следующим образом:

var jQuery = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context );
}

Как видите, он создает объект, вызывая функцию конструктора jQuery.fn.init. Эта функция должна выяснить, что она делает, потому что jQuery использует функцию jQuery для 18 различных вещей. Я не говорю, что это не делает это быстро, но зачем делать всю эту дополнительную работу. : -)

Редактировать : В случае, когда вы передаете в него элемент DOM (что обычно и делает $(this)), jQuery.fn.init не вызывает никаких дальнейших вызовов функций. Так что «просто» два плюс распределение.

0 голосов
/ 01 июля 2010

Функция $ сделает новый экземпляр объекта jQuery (или проверит все существующие, я не уверен, как теперь работает уникальный идентификатор), но он может быть огромнымиздержки в цикле / каждой функции .

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

И нет, это определенно не только символы.

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