2012-09-19 2 views
38

몇 달 전 this article은 웹 사이트 개발을 통해 수업을 실제로 피할 수 있다고 지적했습니다.데이터 속성 CSS 선택기가 클래스 선택기보다 빠릅니까?

제 질문은 클래스 선택기와 비교하여 데이터 선택기가 얼마나 효율적입니까?

간단한 예제는 인 요소와 data-component='something' 인 요소를 비교하는 것입니다.

선택기는 분할되어야하는 클래스 문자열 대 전체 값을 확인합니다. 이를 염두에두고 데이터 속성이 더 빨라야합니다.

CSS의 경우에는 클래스 선택기 또는 데이터 선택기를 사용하는 것이 더 좋습니다. 그리고 자바 스크립트 관점에서 jQuery("[data-component='something']")jQuery(".something")보다 더 효율적입니까?

+1

내가 어떤 종류를 모르는 시도 할 수 있습니다 웹 프로그래밍은 그 기사의 궤변과 관련이있다. 그러나 나는 그것이 내가하는 일과 아무 상관이 없다고 확신한다. 또한이 기사를 자세히 읽으면 필자는 작성자가 클래스와 마찬가지로 '데이터'속성에 많은 관심을 갖고 있다고 의심한다. 그들 모두 결국 똑같은 "범죄"를 대표합니다. – Pointy

+0

귀하의 질문과 관련하여 일부 [jsperf] (http://jsperf.com) 테스트는이 질문에 대한 답을 도울 수 있습니다. 나는'querySelectorAll()'등등을 가진 현대의 브라우저가 어느 쪽의 방법으로도 거의 어려움을 겪지 않을 것이라고 생각한다. – Pointy

+0

데이터 애트리뷰트에 대해 생각하고 클래스를 추가하는 대신 스타일을 지정하면할수록 더 좋아집니다. 예를 들어, 검색 상자와 같은 블록 요소가 숨겨져 있다는 사실을 data-state = 'hidden'으로 나타낼 수 있습니다. 이것은 개발자가 읽을 수있는 것보다 '컴포넌트 위젯 - 헤더 터치 가능 숨겨진 둥근 - 톱'보다 쉬워 보입니다. –

답변

21

나는 이라는 결론을 내리지는 않겠지 만 클래스 선택기가 더 빠르다고 생각합니다.

http://jsperf.com/data-selector-performance

편집 :

블라드의 내 jsperf 테스트 ...를 바탕으로 성능이 우려 (특히 IE) ... 클래스가 여전히

+0

클래스를 테스트 중이며 일부 테스트 케이스에 querySelectorAll을 추가합니다. –

+2

http://jsperf.com/testing-data-atribute-selectors 네, 심지어 querySelectorAll은 데이터 속성에서 느립니다. 이것은 충격적이다! \ "\"안에 실제 값을 얻기 위해 문자열 분할이 없기 때문에 더 빨라질 것으로 기대하고있었습니다. –

+2

와우 .... IE9에서 테스트 ... 단일 클래스 선택기 _blows away_ 데이터 선택기 ... 그리고 그 하나의 테스트에 대한 크롬보다 더 빠릅니다. IE 6300 운영/대 Chrome의 4800 ... – BLSully

4

을 갈 수있는 방법 인 경우 저는 셀러 브라우저의 성능에 비해서도 셀렉터의 성능이 충분히 빠르다는 인상을 받았습니다. 선택기를 많이 사용하거나 데이터 속성이나 클래스 기반을 사용하려고 계획하지 않는 한 (이미 쿼리 한 선택기를 캐시하기 위해 코드를 다시 방문하도록 제안하는 경우) 그렇게 나쁘지는 않다고 생각할 수 있습니다. 그리고 나는 심지어 다른 사람들보다 스타일을 사용하는 것이 극적이지 않다고 말할 것입니다.

브라우저 공급 업체가 셀렉터에 대한 쿼리보다 가장 많이 사용되는 시나리오 (클래스에 대한 쿼리)를 개선하는 데 더 많은 시간을 할애했다고 생각합니다. 이것은 변화하고 있으며 다른 사례도 최적화되기 시작하면 놀라지 않을 것입니다.

9

그가 제공 한 BLSully의 답변과 test page을 확인한 후 여기에 비교를위한 실제 수치가 나와 있습니다.

초당 jQuery를 데이터 속성 선택기 성능 조작 VS

jQuery를 클래스 선택기 성능 : 27.0.1453

  • 140 % 빠른 파이어 폭스 15.0.1
  • 131% 빠른 크롬에

    • 31 % 9.0
    • 1,356퍼센트 빠른 10.0
    IE에서 IE의 21.0
  • 1,267퍼센트 빠른 파이어 폭스 0
  • 0

    나는이 모든 대답에 대해 모르지만 나는 자신의 테스트를 실행하고 속성이 빠릅니다.

    당신은 당신의 자기 다만, 처음에 시간을 절약하는 작업을하고 최종 시간을 얻을 후 수학을

    \t \t var newDate = new Date().getTime(); 
     
    \t \t $('.test-t').removeClass('act'); 
     
    \t \t $('.t1r').addClass('act'); 
     
    \t \t var currentDate = new Date().getTime(); 
     
    \t \t var diff = currentDate-newDate; 
     
    \t \t console.log(diff); 
     
    
     
    \t \t var newDate = new Date().getTime(); 
     
    \t \t $('.test-t2').attr('this-act',''); 
     
    \t \t $('.t2r').attr('this-act','1'); 
     
    \t \t var currentDate = new Date().getTime(); 
     
    \t \t var diff = currentDate-newDate; 
     
    \t \t console.log(diff);

    +0

    각각의 인스턴스 하나가 사례를 증명하기에 충분한 지 잘 모르겠습니다. 내가 귀하의 스 니펫을 실행할 수 없기 때문에 각 접근법에 대한 시간은 얼마나 다른가요? – miltonb

    +0

    어쩌면 질문이 제기 된 후 몇 년 후 브라우저에 쿼리 엔진을 업데이트 할 시간이 있었기 때문에 데이터 속성이 더 빨라졌습니다. 이것을 지적하는 것이 좋습니다. 어쩌면 우리는 오늘날의 표준과 일치하도록 질문을 업데이트해야 할 것입니다. –

    관련 문제