[jquery] jQuery .hasClass () 대 .is ()

성능 관점에서 요소에 클래스가 할당되었는지 여부를 결정하는 선호하는 방법이 있습니까?

$('#foo').hasClass('bar');

또는

$('#foo').is('.bar');



답변

최신 정보:

나는 댓글과 4 개의 찬성표에 따라 테스트를했습니다. 내가 말한 것이 정답 인 것으로 밝혀졌습니다. 결과는 다음과 같습니다.

여기에 이미지 설명 입력

http://jsperf.com/hasclass-vs-is-so


(가) is다목적, 당신은 예를 들어 할 수있는 is('.class'), is(':checked')등 어떤 수단 is더 많은 일을 위치를 hasClass제한하는 유일한 클래스 인 세트에 대한 검사 여부.

따라서 hasClass어떤 수준의 성능이 최우선이라면 더 빨라야합니다.


답변

제공된 표현식을 처리하는 데 사용 하는 is것보다 더 일반적 이기 때문에 더 빠른 것 같습니다 .hasClassfilterhasClass

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();

나는 얻었다 :

  • usingIs : 3191.663ms
  • usingHas : 2362.523ms

큰 차이는 아니지만 많은 테스트를 수행하는 경우 관련이있을 수 있습니다 .

내가 ‘큰 차이가 아니라고 말할 때 편집하십시오 . 내 요점은 0.8s의 차이를 보려면 10000 사이클을 수행해야한다는 것입니다. 에서 is로 전환하면 hasClass모든 성능이 크게 향상 되는 웹 응용 프로그램을 보면 놀랄 것입니다. 그러나 이것이 속도가 35 % 향상되었음을 인정합니다.


답변

둘 다 성능면에서 매우 비슷해야하지만 $('#foo').hasClass('bar');더 읽기 쉽고 의미 상으로 정확 해 보입니다.


답변

.hasClass여기.is
에서 테스트 할 수있는 것보다 훨씬 빠릅니다 . 당신에 따라 테스트 케이스를 변경하십시오.


답변