2010-12-15 8 views
15

저는 오랫동안 jQuery를 사용 해왔고 저는 저의 작업을 위해 슬라이드 쇼 플러그인을 작성해 왔으며 저는 (의식적으로 100 %가 아닌) 아마 단일 체인에서 75 %를 썼습니다. 그것은 완전히 주석을 달았습니다. 그리고 각 end()을 지정하고, 그것을 리셋하는 것 등이 있습니다. jQuery 또는 DOM 로딩 속도를 줄이거 나, 실제로 속도를 높이나요?긴 jQuery 체인이 좋지 않습니까?

+1

이이'[성능]'태그

$(this) .find('.funky') .css('width', 30) .attr('title', 'Funky Title') .end() .fadeIn(); 

훨씬 더 (우아한)보다는 2 개 jQuery를 $(this) 객체를 만들 필요가 없습니다 주요 관심사 : –

답변

7

언제나처럼 특정 코드에 따라 다릅니다. 참조 번호를 저장하는 것에 관해서는 ... 참조와 같이 여분의 수하물 (저장/복원)을 처리해야하기 때문에 실제로 긴 체인이있는 .end() 건 전화를 거는 대신 더 빠릅니다. .selector, .context아마 많은 경우에 대해 신경 쓰지 않아도 .... 그리고 이전 개체에 대한 더 많은 얽힌 참조.

비용이 많이 드는 곳은 측정하기가 더 어렵습니다 ... 실행이 아닙니다 (하지만 속도는 더 느리지 만 무한대 임에도 불구하고) ... 나중에 모든 개체를 정리하는 더 복잡한 가비지 수집입니다. 종속성 그래프 이제 훨씬 더 커졌습니다.

이제 ... 을 측정 할 수 있습니까? 차이가 있습니까? 체인이 실제로 길지 않은 경우가 아니면 일 것입니다. 대부분의 경우 걱정할 필요가없는 마이크로 최적화입니다.

심각한 성능 저하를 보이지 않는 한 은 대부분의 마이크로 최적화와 마찬가지로과 관련하여 걱정할 필요가 없습니다. 퍼포먼스에 문제가 있다면, 퍼포먼스에 참여하십시오.

+1

+1,'.end()'사용에 대한 좋은 힌트가있다. –

+1

+1 의존성 그래프 크기에 관한 점. – Orbling

+0

감사! 알아 둘만한. 캐싱 등,하지만이 많은 선택기 및 코드를 그냥 일종의 잘 쇠사슬에 묶여 흘러, 그래서 나는 그걸로 갔다 생각 ... 어 오 ...이 일이 느려질 수도 있습니다. –

2

같음은 중개자가 없기 때문에 차이가 없으며 빠릅니다.

유일한 단점은 중간 변수를 여러 줄로 작성하지 않고 주석을 사용하거나 주석을 사용하거나 깔끔하게 정리 된 콜 체인을 사용하여 주석을 통해 생각하면 명확합니다.

6

최신 브라우저에서 수행 할 수있는 가장 비용이 많이 드는 작업 중 하나는 DOM에 액세스하고 조작하는 것입니다. 체인을 사용하면 수행해야하는 실제 조회를 최소화 할 수 있으므로 코드가 훨씬 빠릅니다. 다른 옵션은 초기 검색을 수행하여 변수에 저장하고 그 변수에서 모든 것을 수행하는 것입니다. 즉, jquery는 체인 API를 염두에두고 특별히 설계되었으므로 연결하는 것이 더 관용적입니다.

4

jQuery의 연결 가능성은 훌륭한 기능이라고 생각합니다. 실제로는 더 자주 사용해야합니다. 예를 들어 : - : 그 이후,

$(this).find('.funky').css('width', 30).attr('title', 'Funky Title'); 
$(this).fadeIn(); 
+0

두 개의 jQuery'$ (this)'...'var obj = $ (this) .find ('. funky')를 만들 필요가 없습니다. css ('width', 30) .attr ('title' , '펑키 타이틀'); obj.물론 변수에 저장하면 fadeIn(); ' – Matt

+0

하지만 대부분의 jQuery 사용자가 내 경험에 쓰는 경향이있는 것이 아니기 때문에 $()를 "남용"합니다. 그 이유는 내가 체인을 우아하게 발견 - 하나는 변수에 싸게 머물 수 있습니다 :). 게다가 당신은 코드가 내 것과 다른 smt ... ($ (this.) 대신'$ (this.) .find ('. funky')가된다. – kares

+0

@Matt - 같은 효과가 없을 것이다. , 당신의'obj' 변수는'this'가 아닌'.find' 엘리먼트를 참조합니다 :) –

관련 문제