0

для элемента DIV, я там интересно, какие из этих селекторов, вероятно, будет быстрее

$("#ELEMENT_ID") 
$('div[id="ELEMENT_ID"]') 

является любая разница в производительности между использованием только идентификатора DIV или ограничение поиска элементами DIV только с его идентификатором?

+5

Я боюсь не производительности. я бы скорее беспокоился об удобочитаемости, а также об использовании CSS-правил для таргетинга идентификационных элементов. – Joseph

+1

Если вы хотите ограничить выбор только divs, почему бы вам не использовать 'div # id' вместо этого? – zerkms

+0

http://stackoverflow.com/questions/1245598/jquery-standards-and-best-practice –

ответ

4

или ограничение поиска элементов DIV только с его идентификатором?

Обратите внимание, что идентификаторы уникальны, поэтому, если вы используете один ID более чем для одного элемента, это неправильная вещь.

div[id="ELEMENT_ID"] и даже div#ELEMENT_ID, как правило, являются излишними, если только вы не включаете таблицу стилей на нескольких страницах, а на разных страницах используется один идентификатор для разных элементов. Это, вероятно, не очень хорошая идея, так как это, вероятно, путает кого-то, читающего код.

+0

Согласитесь с большинством, но что вы подразумеваете под 'superfluous'? – zerkms

+0

«лишний» означает «ненужный». –

+0

почему вы считаете это ненужным? Что делать, если вам нужно выбрать 'ELEMENT_ID' ** только **, если это' div'? – zerkms

2

Проверка на jsPerf показывает, что только селектор id работает намного быстрее. http://jsperf.com/id-vs-data-id/4

+0

Интересный .. видимо, первый селектор быстрее, чем другой. Спасибо +1 – Galilyou

2

Для #ID и div#ID селекторов, JQuery mentiones что:

для удостоверения личности селекторов, JQuery использует функцию JavaScript document.getElementById(), который является чрезвычайно эффективным. Когда к селектору id присоединяется другой селектор , такой как h2 # pageTitle, jQuery выполняет дополнительную проверку перед идентификацией элемента как совпадение .

Для div[ID=something] селектора Я не совсем уверен, но я сомневаюсь, что это будет быстрее, чем #ID. Я бы run a performance benchmark and check the results.

PS: есть интересное примечание на jQuery ID selector странице:

Как всегда, помните, что в качестве разработчика, ваше время, как правило, самым ценным ресурсом. Не фокусируйтесь на оптимизации скорости селектора , если не ясно, что производительность должна быть улучшена.

+1

Я мало знаю о jQuery, но действительно ли он делает все вручную? Не обнаруживает ли это присутствие 'querySelectorAll' и использует его, когда доступно, и селектор является сложным? Это будет быстрее, так как это, скорее всего, реализовано в собственном коде, хотя могут возникнуть вопросы о возможных несоответствиях реализации. Опять же, независимо от того, использует ли он собственный код или нет, он будет медленнее. –

+0

@ Delan: да, я не уверен, что jQuery/sizzle/querySelectorВсе делаете за кулисами, поэтому, возможно, мне следует отредактировать мой ответ. –

+0

Вы уверены, что Sizzle использует gEBI за кулисами? Я перфекционировал это недавно, и он был на несколько порядков медленнее. –

Смежные вопросы