Performans açısından bir öğeye bir sınıf atanıp atanmadığını belirlemenin tercih edilen bir yöntemi var mı?
$('#foo').hasClass('bar');
veya
$('#foo').is('.bar');
Performans açısından bir öğeye bir sınıf atanıp atanmadığını belirlemenin tercih edilen bir yöntemi var mı?
$('#foo').hasClass('bar');
veya
$('#foo').is('.bar');
Yanıtlar:
Bir yorumu ve dört yoruma oy verdikten sonra bir test yaptım. Söylediğim şeyin doğru cevap olduğu ortaya çıktı. İşte sonuç:

http://jsperf.com/hasclass-vs-is-so
Bu is, çok amaçlıdır, örneğin yapabilirsiniz is('.class'), is(':checked')vb. Bu , sınırlı olduğu yerde yapılacak daha çokis şeyin olduğu anlamına gelir ;hasClass
Bu nedenle, hasClassherhangi bir düzeyde performans önceliğinizse daha hızlı olmalıdır.
hasClass , çok daha hızlı.
Yana isdaha geneldir hasClassve kullanımları filtersağlanan ifadesini işlemek için, gibi görünmektedir hasClasshızlıdır.
Firebug konsolundan aşağıdaki kodu çalıştırdım:
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();
Bende var:
Çok büyük bir fark değil, ancak çok sayıda test yapıyorsanız alakalı olabilir .
DÜZENLEME 'çok büyük bir fark değil, benim açımdan, 0,8 saniyelik bir fark görmek için 10000 döngü yapmanız gerektiğidir. Ben geçiş öyle ki bir web uygulaması görmeye şaşıracaksınız isiçin hasClasstüm performans üzerinde önemli bir gelişme görecekti. Ancak, bunun hızda% 35'lik bir gelişme olduğunu kabul ediyorum.
Her ikisi de performans açısından oldukça yakın olmalı ama $('#foo').hasClass('bar');bana daha okunaklı ve anlamsal olarak doğru görünüyor.