2012-12-05 10 views
3

this jsperf test의 스 니펫 중 하나가 다른 것보다 현저히 느린 이유를 이해하려고합니다. Find/Children 대 자손 선택기 jquery 성능 차이

은 네 조각입니다

$(".menu-vertical li.selected > ul.static").show().parents().show(); 

$('ul.root').find('li.selected').children('ul.static').show().parents().show(); 

$("ul.root li.selected > ul.static").show().parents().show(); 

$('ul.root li.selected').children('ul.static').show().parents().show(); 

두 번째는 모든 브라우저에서 일관되게 느린 것 같다 나는 이유를 이해하지 않습니다.

답변

3

두 번째는 다른 것들과 다른 점은 무엇입니까?

$('ul.root')    // you get the collection of all `ul.root` 
    .find('li.selected') // in each collection you search for `li.selected` 
    .children('ul.static') // you get `ul.static` children elements of each found 
    ... 

몇 번 반복해야하는지주의하십시오. 다른 모든 예제에서 대부분의 검색은 단일 쿼리에서 수행되며 여러 번 더 빠르게 평가됩니다.

+0

찾기를 사용하는 동안 동일한 결과를 얻는 더 효율적인 방법이 있습니까? (또는 내 질문을 개혁하기 위해, 왜 더 늦기 때문에 afterall을 사용합니까?) –

+0

@GeorgeKatsanos 종종 싱글 셀렉터가 더 빨리 수행됩니다. 그러나 어떤 경우에는'발견'이 은색의 총알이 될 수 있습니다. 그래서, 내 대답 : 그것은 다릅니다. – VisioN

+1

많은 유사한 질문을 여기에서 살펴본 후 가상 시나리오를 사용한 벤치마킹은 HTML, 브라우저, 컴퓨터 등의 결과가 다르기 때문에 많은 도움이되지 못합니다. –

0

아동 문제의 수를 부여했다. $el.children('selector') 수행 더 나은 몇 아이들과 함께

더 많은 (말> 10) 어린이와

$el.find('> selector') 수행한다.

children()은 모든 자식을 반복하여 주어진 selector를 테스트하기 때문입니다.