2014-09-10 10 views
3

".foo"와 일치하는 요소가 있다고 가정합니다.

<div class="foo"></div> 

나는 같이 나는 동일한 개체를 여러 번 변경하기 위해 노력하고있어 경우, 두 번 이상 측정기를 호출 경험에서 성능 저하를 배웠다.

$foo = $(".foo"); 
$foo.callAllThreeOfTheThingMethodsInThePreviousBlock(); 
// Calls $(".foo") only once, but occupies memory with a jQuery object version of the foo div. 

$(".foo").doOneThing(); 
$(".foo").doAnotherThing(); 
$(".foo").doSomethingElse(); 
// Makes jQuery look for ".foo" three times, bad! 

내 질문에, 얼마나 많은 시간을 당신이 jQuery 오브젝트를 개최 메모리를 따로 설정하는 대신 다시 jQuery를 메서드 호출을하기 전에이 측정기를 사용하는 것입니까?

저는 이전에 기억 된 $ object 변수에 두 번 이상 호출 한 모든 찾기를 만들었습니다. 내 상사는 예를 들어 2 ~ 3 번만 파인더를 사용하는 경우 저장 물체 대신 파인더를 대신 사용한다고 말했습니다. 이걸 네가 어떻게 생각하니?

+0

같은 항목을 세 번 발견하면 더 좋은 대신 로컬 변수에 저장하는 것이 좋습니다. –

+0

두 번 이상 나타나면 var를 들어 올리는 경향이 있습니다. 나는 모든 것을 위해, 심지어 간단한 끈조차도 그렇게한다. 또한 $ (".foo"). doOneThing(). doAnotherThing(). doSomethingElse();'너무 효과적입니다. <3 체인. – RaphaelDDL

+1

두 가지 다른 방법으로 많은 작업을 수행하는 방법을 보여주기위한 약간의 큰 그림. http://plnkr.co/edit/lb3Cew3j1p5HE5goCgqd?p=preview – Pr0gr4mm3r

답변

3

jQuery를 검색을 반복 할 것입니다 $(".foo") 여러 시간을 사용하여 사용 var $foo = $(".foo");

. jQuery가 셀렉터를 캐시하지 않는 것처럼 보였습니다. 그렇더라도 자신이 현명하고 다른 사람에게 의존하지 않는 것이 낫습니다. 변수에 쿼리 결과를 저장

Does jQuery do any kind of caching of “selectors”?

+1

jQuery 캐시 선택기 생각하지 않습니다. 그렇다면 돔이 바뀔 수 있고 모든 것을 망칠 수 있기 때문에 그것은 진지한 마법이어야합니다. – m59

+0

@ m59 좋은 지적. 편집 됨. – kornieff

+2

이것은 OP의 유스 케이스에 대한 해답이지만 jQuery 객체를 변수에 "저장"하면 검색을 수행 할 때 선택 영역이 캐시 될 것입니다. DOM을 변경 한 후에 다시 사용하려고하면 예기치 못한 결과가 발생할 수 있습니다 결과. – nrabinowitz

1

는 쿼리가 repetetive 대부분의 상황에서 권장됩니다. 상황에 따라 함수를 연속해서 호출 할 수도 있습니다.

$(".foo").doOneThing().doAnotherThing().doAnotherThing(); 
관련 문제