Самый эффективный способ использования селекторов в jQuery?

эффективнее использовать $('.active') или $('div.active')? Я всегда избегал включать "div", потому что это дополнительный текст в файле javascript, который я не хочу, чтобы пользователь загружался.

Ответ 1

Старые версии IE выиграют от включения div, потому что они не поддерживают getElementsByClassName().

Из-за этого каждый элемент на странице должен быть выбран с помощью:

document.getElementsByTagName('*');

... и вручную проверили, есть ли у него класс active.

Если вы включили div, то он может немного сузить его, поскольку он может сделать:

document.getElementsByTagName('div');

... затем проверьте только те элементы.

Когда я говорю более старые версии, я имею в виду IE6 и IE7, поскольку IE8 + поддерживает querySelectorAll.


EDIT:

Поддержка браузера:

Ответ 2

Это зависит. Если вы имеете в виду производительность. Я подготовил специальный тест для всех на JSPerf: тест выбора класса jquery. В моем браузере и компьютере (FF 3.6.13 и Core 2 Duo 1.6) div.active немного медленнее. Но он нашел переменным - похоже, у GC есть что-то здесь.

И после нескольких тестов кажется, что div.active:

  • Скорость переменной на FF, иногда GC включает тест div.active, но в целом разница очень мала.
  • Незначительная разница в Chrome и Safari
  • Быстрее на IE9

Ответ 3

Мне нравится включать имя тега, если оно помогает самодокументировать код. Если я могу использовать

$("nav.primary") 

вместо

// this is the primary nav
$(".primary")

Я стараюсь это делать.

Ответ 4

Я думаю, что лучший способ получить некоторую скорость на больших страницах - это использовать find.

$(ваш-контейнер).find( "div.active" )

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

Кстати, вам не нужно заботиться о размере css, КОГДА-ЛИБО:) Используйте инструменты css minifing для минимизации css, когда сайт находится в рабочем режиме. Вы также можете настроить свой веб-сервер для автоматического gzip ваших файлов css перед отправкой пользователю. И если вы не измените имя файла css на каждой странице, кеш браузера до всего файла css.

Ответ 5

Селекторы CSS в jQuery были оптимизированы аналогично тому, как вы это делали для браузеров, см. http://css-tricks.com/efficiently-rendering-css/

Указание общего тега в любом месте, даже с идентификатором или классом, будет значительно медленнее, чем просто указывать только идентификатор или класс. См:

http://www.no-margin-for-errors.com/demos/how-to-optimize-jquery-selectors/

В приведенном выше примере используется jQuery 1.3. Поскольку jQuery 1.4 и введение механизма Sizzling-селектора, это менее важно из того, что я понимаю. См:

http://hungred.com/useful-information/jquery-optimization-tips-and-tricks/

Для себя я решил в CSS использовать все, что читает самое легкое, и я более конкретный, так как это только разобрано. Однако в jQuery я был более осторожен, так как эти селекторы могли работать тысячи раз в течение жизни страницы.