2012-04-23 3 views
3

Я пытаюсь найти окончательный ответ на старый вопрос «Должен ли я использовать имя тега при выборе с классом?»Селекторы класса jQuery: с или без тэга?

Везде, где я смотрю в Интернете для лучших практик jQuery, почти всегда используется точка jQuery («tag.className»); потому что сначала использует getElementByTagName.

Итак, я установил контрольный показатель на jsPerf для проверки. Я использовал исходную разметку на своем веб-сайте, чтобы ее больше проверить в реальном мире и запустить тест во всех современных браузерах, и помимо Chrome и Opera все другие современные браузеры говорят, что jQuery («. ClassName»); на порядок быстрее, хотя это противоречит почти всему, что я читал в книгах и учебниках в Интернете. Я предполагаю, что это быстрее, потому что эти браузеры поддерживают getElementByClassName изначально.

Вот тест:

http://jsperf.com/length-detection

Что вы думаете лучше?

Большое спасибо

Chris

+0

Ваш тест эффективности вводит в заблуждение. В вашем тестовом объекте нет элементов, соответствующих «p.entry-meta», но есть два совпадающих «.entry-meta». Это не честный тест. –

+0

http://jsperf.com/length-detection/2 –

+0

Извините, что моя ошибка изменит его. Не собирался ничего трогать. –

ответ

3

Если вы действительно после выполнения, вы не должны использовать JQuery вообще для запроса элементов. См. Этот jsperf: http://jsperf.com/jquery-selecting-by-class

Здесь мы можем поговорить о «величинах». Честно говоря, не глядя на текущий источник jQuery, я не могу сказать, что делает jQuery под капотом. Даже если он использует getElementsByClassNames, он будет иметь малое и нулевое влияние на общую производительность из-за всей крови и накладных расходов, которые идут вдоль jQuery. Во всяком случае, основное правило для элементов запроса прост: Не следует указывать слишком подробно. Селектора CSS работают справа налево, поэтому, когда у нас есть запрос типа element.classname, большинство движков сначала захватят все элементы с именем класса classname, а затем отфильтровывают узлы, которые также относятся к типу элемента element.

+0

Он использует 'document.querySelectorAll', когда это возможно. – Jon

+0

@Jon, который медленнее, чем gEBI/gEBTN/gEBCN. –

+0

@Jon, @GGG: быстрый взгляд на источник говорит, по крайней мере Sizzle использует 'getElementsByClassName' – jAndy

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