2012-04-04 6 views
3

C#에 대해 비슷한 질문이 있지만 JavaScript에 대한 내용이 없습니다.JavaScript 루프 외부에서 변수를 선언 할 때 속도와 메모리가 도움이됩니까?

루프 내에서 변수를 선언하는 것이 허용됩니까?

반복 횟수가 200 회라고 가정합니다.

샘플 1보다 샘플 2를 사용하는 데 성능이 중요합니까 (메모리 및 속도)? 우리는 jQuery를 사용하여 루프를 작성합니다. 루프 내에서 var를 유지하는 코드 가독성이 향상되지만, 모범 사례가 아니거나 성능이 현저하게 떨어지거나 메모리 사용량이 늘어난다면 바꿀 것입니다.

**Sample 1:** 
$(this).each(function() { 
    var i = $(some_div).clone(); 
    *** edit i *** 
    $(another_div).append(i); 
}); 



**Sample 2:** 
var i = null; 
*** edit i *** 
$(this).each(function() { 
    i = $(some_div).clone(); 
    $(another_div).append(i); 
}); 
+0

왜 이것을 측정하지 않습니까? –

+0

@ Crashalot : 샘플 1에서 각 반복마다 변수가 만들어집니다. 샘플 2에서는 변수가 재사용됩니다. 성능 테스트를 해봤습니까? –

+0

아니요,이 패턴이 확립 된 패턴이어야하므로 모범 사례를 듣는 것이 궁금합니다. 우리는 var가 재사용되기 때문에 성능 이득이 있다고 가정하지만 상당한 이점이 있는지 궁금해합니다. vars가 루프 안에 있으면 코드를 읽는 것이 더 간단하지만 속도와 메모리 성능에 외부 선언이 필요한 경우 우리는 그렇게 할 것입니다. – Crashalot

답변

3

샘플 1 (내부 변수) 빠른 : http://jsperf.com/variable-outside-faster

그러나 차이는 신경 충분히 가치가되지 않습니다.

+0

와우, 이거 멋지다! 어떻게이 사이트를 찾았습니까? – Crashalot

+0

우리는 혼란스러워합니다. 어떻게 내부가 더 빠릅니까? 추가 작업 (변수 선언)을 실행하지 않습니까? 우리는 또한 기억에 미치는 영향에 대해서 궁금합니다. – Crashalot

+0

@Crashalot Paulirish.com에서 이것을 사용하는 것을 보았습니다. 왜 더 빨리, 그냥 테스트했는지 설명 할 수 없습니다. – binarious

0

구현에 따라 달라질 수 있지만 원칙적으로 성능에 눈에 띄는 차이는 없을 것이라고 생각합니다. 루프에 jQuery를 사용하기 때문에, i 변수는 첫 번째 경우에는 함수 범위에 있고 두 번째 경우에는 바깥 범위에 있습니다. 메모리 할당에 약간 다른 효과가있을 수 있지만 눈에 띄지는 않을 것입니다. 구현을 선택하고 성능을 측정하려는 유일한 방법.

0

의미가 다를 수 있으므로 사과 대 오렌지 비교입니다. 예 : 동 기적으로 대신 Ajax 콜백 내에서 i을 사용하는 경우이 변경을 수행 한 경우 서로 다른 값이 아닌 i에 대한 마지막 할당이 거의 확실하게 사용됩니다.

순수한 추측은 다음과 같습니다

은 결과적으로 우리는 더 일을해야합니다, 당신은 폼 내부의 var의 잠재력을 사용하고있는 경우 각 i에 대해 서로 다른 메모리 주소를 필요가 있음을 알고있다.

$.each이 콜백 인수를 동 기적으로 사용한다는 것을 확인하는 데 상당한 분석이 필요합니다. 결과적으로, 이것이 유효한 최적화라면, 나는 대부분의 JS 컴파일러가 그것을 만들 수 없을 것이라고 생각하고 수동으로 만드는 것은 (일정한 시간) 속도와 메모리 향상을 가져다 줄 것입니다.

기타 고려 사항 :

더 많은 어휘 범위 잠재적 변수를 찾는의 선형 적으로 증가하는 비용을 의미한다.

3

이것은 미세 최적화입니다. 그렇게하지 마십시오.

대신에 읽을 수있는 코드를 작성하고 코드를 문서화하고 테스트하는 데 에너지를 투자하십시오. 느린 당신에게 규모의 주문을 jQuery를 같은 비 대한 추상화를 제거

  • :

    그러나, 최적화 가치가있는 몇 가지 높은 수준의 문제가 있습니다.렌더링을 그리기의 양을 감소
  • 서버 - 클라이언트 여행의 대기 시간을 감소하여 알고리즘
  • 의 큰 O 복잡성을 감소 화면
  • 에 일을하고 있습니다.
+0

jquery가 아닌 경우 모바일 사파리로 무엇을 권하고 싶습니까? – Crashalot

+1

모바일은 리소스가 제한된 환경입니다. 일부 앱에서는 성능이 중요합니다. 필요하지 않다는 충분한 정보가 없습니다. – AutoSponge

+0

@Crashalot 라이브러리가 필요하지 않습니다. "바닐라 자바 ​​스크립트"를 사용합니다. – Raynos

관련 문제