2011-08-04 4 views
3

jQuery를 사용할 때

$('blah').doSomething(); 
//bunch of code 
$('blah').doSomethingElse(); 
//bunch of code 
$('blah').doOtherStuff(); 

$ ('blah') 할 때마다 새 jQuery 객체가 생성됩니까?

그렇다면 객체 생성 오버 헤드를 줄여 대신 다음과 같이하십시오.

var blah = $('blah'); 
blah.doSomething(); 
//bunch of code 
blah.doSomethingElse(); 
//bunch of code 
blah.doOtherStuff(); 

의미가 있습니까?

+1

다음은 jQuery Fundamentals의 관련 섹션입니다. http://jqfundamentals.com/book/index.html#example-3.9 – Acorn

답변

6

절대적으로 맞습니다!

왜 캐시

캐싱의 또 다른 장점은 코드 유지 관리이다. 선택기가 한 위치에만있는 경우 한 곳에서 선택기 만 변경하면됩니다. 나를 믿어 라. 그러면 코드를 유지할 때 더 쉬워진다.

체인

당신이 한 단계 더 갈 수 있지만 (적절한 경우), 체인 통화는 :

$('blah') 
.doSomething() 
.doSomethingElse() 
.doOtherStuff(); 

이 2 가지 이유로 약간 더 좋다. 첫째, 여분의 변수를 사용하지 않으므로 소량의 메모리를 절약 할 수 있습니다. 두 번째로, 언어는 각 식별자 사용에 대한 검색을 수행하지 않으므로 더 빠릅니다.

는 그럼, 왜 사람들은 여전히 ​​[다음] 그들이 어떤 더 잘 모르기 때문에 $()

이유 중 하나는 사람들이 $() 많이 사용이 사용합니까.

요소 선택이 더 느려졌 기 때문에 또 다른 이유가 있습니다. 하지만 브라우저의 대부분 기능과 마찬가지로 선택기를 사용하여 개체를 쿼리하는 것이 빠르게 최적화됩니다 (document.querySelectorAll). 즉, 캐시하지 않거나 캐시하지 않는 것이 중요하므로 캐시하지 않도록 할 수 있습니다.

마지막으로,이 문제가 아니면 캐시에 더 빠른 하지하지 않음을 주장하려고 (빠른 구글에서 onetwo) 주위를 어슬렁 벤치 마크가 있습니다. 이러한 벤치 마크의 대부분에 대한 문제점과 그로부터 결론을 도출하는 것에 대해 매우주의해야한다고 제안한 이유는 예제의 DOM이 실제와 다르다는 것입니다. 지나치게 단순하다. 둘째, 셀렉터 역시 단순합니다. 물론 질의 처리는 번개처럼 빠르게 진행될 것이고 캐싱은 큰 차이를 만들지 않을 것입니다. 그러나 나는 결정적으로 만 찾지는 못합니다.

귀하의 사례가 벤치 마크의 사례와 비슷하다면 자신의 상황에 대한 결론을 이끌어 내고 캐싱이 문제가 될 수도 있습니다.

+1

+1 for chaining. 또한 IIRC는 소스를 읽지 않기 때문에 jQuery가 마지막 쿼리를 캐시하므로 James의 예에서별로 중요하지 않습니다. –

+1

하지만 호출이 코드의 다른 위치에 있으면 위의 "선언 1, 다음 재사용"이 좋은 방법일까요?그렇다면 왜 그 곳곳에 너무나 많은 과격한 $()이 반복되는 것을 볼 수 있습니까? – James

+0

내가 더 잘하기 위해 노력하고있는 것을 반영하기 위해 내 질문을 수정해야합니다. 그게 여기서 연습하는거야? – James