Каждый раз, когда вы можете использовать селектор ID, он будет быстрее. Механизм селектора jQuery (Sizzle) читается справа налево. Единственное исключение - если в крайнем левом углу находится id
, то для охвата поиска используется id
.
Кроме того, поскольку jQuery использует встроенные функции браузера, где это возможно, всегда указывать имя тега при использовании селектора классов.
В вашей серии вариантов, как на «что быстрее», это будет выполнять быстрый:
$('#panel p.xyz');
Потому что это сфера поиска к одному элементу, а затем найти p
теги, а затем выпадают выбора всех тех, у кого нет соответствующего класса.
В некоторых браузерах, с большим количеством других родственный p
тегов, не должен соответствовать запрос, он будет выполнять намного быстрее, чем:
$('#panel .xyz');
Просто помните, что JQuery использует столько нативные функции насколько это возможно. Каждый основной браузер имеет getElementById
, поэтому, если это возможно, используйте id
.
Далее, у каждого браузера есть getElementsByTagName
. У некоторых браузеров нет getElementsByClassName
. Таким образом, помощь jQuery поможет вам с помощью id
, где возможно охватить поиск, а также путем сопоставления имен тегов с классом для поиска класса.
Никогда не передавайте объект JQuery в параметре Область
Одна вещь, вы должны НИКОГДА не сделать, это ваш последний пример:
$(".xyz", $('#panel'));
Это не будет иметь никакого влияния скорости (и в цикл будет медленнее), чем с использованием обычной строки. Только каждый передает элемент DOM в этот параметр. Это может быть очень полезно, если у вас есть элемент DOM уже:.
$("#panel").click(function(){
var p = $("p.xyz", this); // This is fast
});
Я читал когда-то, что, «Если я не ошибаюсь, JQuery также снизу вверх двигатель Это означает, что $ („# Foo бар ДИВ“) намного меньше, чем $ («bar div #foo»). Например, $ ('# foo a') будет проходить через все элементы на странице и посмотреть, есть ли у них предок #foo, что делает этот селектор очень неэффективен ». http://stackoverflow.com/questions/46214/good-ways-to-improve-jquery-selector-performance/2062027#2062027 – Allen
Итак, вы уверены, что $ ('# panel p.xyz') будет быстрее, чем просто $ ('p.xyz')? – Allen
Это правда в некоторой степени ... однако, в случае JQuery Sizzle это знает, и сразу же идет ярлык к ID. Если у вас несколько элементов с одинаковым идентификатором, это будет непредсказуемо, но это все равно недействительным HTML, так вот как работает sizzle ... как и должно быть. –