Элемент + ID против только ID в jquery?

div#some_id просканирует все элементы div в DOM.

#some_id заберет ID непосредственно из DOM.

Так что быстрее? $('div#some_id') или же $('#some_id')?

3 ответа

Решение

Как ID должен быть уникальным в DOM, так div#some_id будет выполнять ненужное сканирование всех элементов DOM и #some_id сделает прямое сканирование на нем.

Вы также можете увидеть результат здесь: http://jspe rf.com/div-some-id-vs-some-id

См. Оптимизировать селекторы:

Начинать свой селектор с идентификатора всегда лучше.

а также

Выбор только по идентификатору обрабатывается с помощью document.getElementById(), который очень быстр, потому что он встроен в браузер.

Поэтому ответ: $('#some_id') должен быть быстрее.

Я провел простой тест здесь, в консоли. Кажется, просто использовать #id быстрее, как сказал @Ulli. Вот тестовый код:

var perf = performance;

var a = perf.now(); $("#custom-header"); console.log(perf.now() - a);
VM795:2 0.03399999695830047
undefined
var a = perf.now(); $("#custom-header"); console.log(perf.now() - a);
VM796:2 0.0329999893438071
undefined
var a = perf.now(); $("#custom-header"); console.log(perf.now() - a);
VM797:2 0.0329999893438071
undefined
var a = perf.now(); $("#custom-header"); console.log(perf.now() - a);
VM798:2 0.03500000457279384
undefined
var a = perf.now(); $("div#custom-header"); console.log(perf.now() - a);
VM799:2 0.07000000914558768
undefined
var a = perf.now(); $("div#custom-header"); console.log(perf.now() - a);
VM800:2 0.06600000779144466
undefined
var a = perf.now(); $("div#custom-header"); console.log(perf.now() - a);
VM801:2 0.0680000230204314
undefined
var a = perf.now(); $("div#custom-header"); console.log(perf.now() - a);
VM802:2 0.06799999391660094
undefined
var a = perf.now(); $("div#custom-header"); console.log(perf.now() - a);
VM803:2 0.06799999391660094
undefined
Другие вопросы по тегам