Есть ли разница в производительности между селектором jquery или переменной
-
05-07-2019 - |
Вопрос
В последнее время меня интересует, есть ли разница в производительности между повторением селектора просто снова и снова или просто использованием var и сохранением селектора в нем и просто обращением к нему.
$('#Element').dothis();
$('#Element').dothat();
$('#Element').find('a').dothat();
или просто
var Object = $('#Element');
Object.dothis();
Object.dothat();
$('a', Object).dothat();
Я предпочитаю второй способ, потому что он выглядит чище и удобнее в обслуживании.
Решение
Несомненно, существует разница в производительности, так как sizzle не нужно выполнять каждый раз, однако есть и разница в функциональности. Если dom меняется между 1-м и 3-м вызовами, кешированный объект jQuery все равно будет содержать старый набор элементов. Это может часто происходить, если вы кэшируете набор, а затем используете его в обратном вызове.
Другие советы
Я предпочитаю второй способ. будет проще поддерживать код , даже если идентификатор элемента или класса изменится.
Есть еще один быстрый способ. Это так же быстро, как ваш второй код.
$('#Element')
.dothis()
.dothat()
.find('a')
.dothat();
тратя на метод Гоммея
var Object = $('#Element');
Object
.dothis()
.dothat()
.find('a')
.dothat();
Быстрее и сохраняет объект для последующего использования.
Второй способ имеет выигрыш в производительности. Это может быть или не быть большим, но это лучше. В первой версии вы выполняете обход dom 4 раза, во второй - только 2.
Довольно хорошая статья по ускорению jQuery здесь: http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/
Сохранение результатов выбора jQuery в переменной происходит быстрее. Это потому, что jQuery не нужно искать результаты каждый раз, когда вы пытаетесь получить к ним доступ.
Я собрал некоторые показатели производительности: http://jsperf.com/jquery-selectors -vs сохраненной переменной р>
В Chrome 26.0.1410.63 в Mac OS X 10.8.2:
Выбор: 40 276 операций в секунду
Хранение переменной: 594 031 358 операций в секунду