существует ли предпочтительный способ определения того, назначен ли элемент классу с точки зрения производительности?
$('#foo').hasClass('bar');
или
$('#foo').is('.bar');
существует ли предпочтительный способ определения того, назначен ли элемент классу с точки зрения производительности?
$('#foo').hasClass('bar');
или
$('#foo').is('.bar');
Я сделал тест, следующий за комментарием, и четыре upvotes для очень комментариев. Оказывается, то, что я сказал, является правильным ответом. Вот результат:
http://jsperf.com/hasclass-vs-is-so
is
является многоцелевым, вы можете, например, сделать is('.class')
, is(':checked')
и т.д., что означает is
имеет больше возможностей, чем hasClass
ограничен, который проверяет только класс, который установлен или нет.
Следовательно, hasClass
должен быть быстрее, если производительность на любом уровне является вашим приоритетом.
Так как is
более общий, чем hasClass
, и использует filter
для обработки предоставленного выражения, кажется вероятным, что hasClass
быстрее.
Я запустил следующий код с консоли Firebug:
function usingIs() {
for (var i=0; i<10000;i++) {
$('div#example-0').is('.test');
}
}
function usingHas(){
for (var i=0; i<10000;i++) {
$('div#example-0').hasClass('test');
}
}
usingIs();
usingHas();
Я получил:
Не большая разница, но может быть актуальной, если вы много тестируете.
EDIT, когда я говорю "не огромная разница, я хочу сказать, что вам нужно сделать 10000 циклов, чтобы увидеть 0.8s разницы. Я был бы удивлен, увидев веб-приложение, так что переход от is
до hasClass
значительно улучшился бы во всей производительности. Тем не менее, я утверждаю, что это 35% -ное улучшение скорости.
Оба должны быть довольно близки по производительности, но $('#foo').hasClass('bar');
кажется более читабельным и семантически правильным для меня.
.hasClass
намного быстрее, чем .is
Вы можете проверить это из здесь. Измените тестовый пример в соответствии с вами.