jQuery .hasClass () 대 .is ()


96

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

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

또는

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

6
여러 브라우저에서이 사이트의 성능을 항상 확인할 수 있습니다. jsperf.com ... 다음은 몇 가지 테스트 사례입니다. jsperf.com/browse
iwasrobbed

답변:


164

최신 정보:

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

여기에 이미지 설명 입력

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


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

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


7
더 빠르다는 증거가 있습니까? 함수가 기능성이 적다고해서 자동으로 더 빠르다는 의미는 아닙니다.
Kris

15
@Kris : 예, 그렇습니다 : jsperf.com/hasclass-vs-is-so . 내가 말했듯 hasClass 훨씬 더 빠릅니다.
Sarfraz 2012

4
'훨씬 더 빨리'=> '더 빨리'
커크 Strobeck

@SgtPooki, 나는 단순히 증거를 요청했습니다. 사실이라면 이유를 알고 싶었습니다. 나는 그렇게 호기심이 많다 :). 더 많은 기능을 쉽게 가질 수 있고 더 빠를 수 있습니다. 그것은 항상 구현에 달려 있습니다. 귀하의 99 %는 포괄적 인 일반화이며 반드시 소프트웨어 개발의 진정한 상태는 아닙니다. "jQuery는 곧바로 자바 스크립트만큼 빠를까요? 아니오가 아닌 다른 대답은 잘못된 것입니다." 좋은 질문이 아닙니다. jQuery에는 실제로 데이터가 캐시되면 DOM 요소에 더 빠르게 액세스 할 수있는 많은 최적화 기능이 있습니다. 특정 용도에 따라 다릅니다.
Kris

1
@SgtPooki 더 빨리 지글 지글 선택기 엔진을 살펴보십시오. 계속해서 언급했듯이 구현에 따라 다르며 기본적으로 쿼리를 지원하지 않는 이전 브라우저에서는 기본 버전이 없기 때문에 jQuery의 구현을 통해 더 빠를 가능성이 높습니다 (기본적으로 승리). 또한 브라우저 및 버전에 따라 동일한 DOM 요소를 계속 리콜하는 경우 jQuery가 더 빠른 검색을 위해이 요소를 캐시 할 수있는 경우 추가 시간이 걸릴 수 있습니다. 일반적으로 기본 JavaScript 함수는 더 빠릅니다. 그러나 브라우저 지원 및 구현에 따라 다릅니다.
크리스

13

제공된 표현식을 처리하는 데 사용 하는 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 % 향상되었음을 인정합니다.


9

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


7

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.