2014-12-28 3 views
1

두 개의 루프 (하나는 다른 하나에 중첩 됨)가 있으며이 루프를 중첩하는 방법에 어떤 차이가 있는지 궁금합니다. 코드 1과 코드 2의 결과는 동일하지만 (100,000x4 = 4x100,000 = 400,000), jsPerf은 코드 2가 코드 1보다 대략 50 % 빠르다는 것을 보여줍니다.두 개의 루프 성능 차이. 내부 및 외부 루프 교환

자문을 구하고 싶습니다. 나는 둘의 차이를 이해하지 못한다.

대단히 감사합니다.

var tt = function() { 
     // do some stuff 
     // for example: 
     return (3); 
    }; 

테스트 코드 1 :

for (var i = 0; i < 100000; i++) { 
    for (var j = 0; j < 4; j++) { 
    tt(); 
    } 
} 

테스트 코드 2 : 각 작업은 비용을 가진 것처럼

for (var j = 0; j < 4; j++) { 
    for (var i = 0; i < 100000; i++) { 
    tt(); 
    } 
} 
+0

가능한 복제본 http://stackoverflow.com/q/11227809/1903116 – thefourtheye

+0

이 질문은 제안 된 속임수와 관련이있는 유일한 질문은 "성능"태그가 있다는 것입니다.) 그것은 완전히 다른 언어입니다.이 언어는 정렬을 포함하지 않습니다. – paxdiablo

+0

@ paxdiablo 나는 내부 루프가 첫 번째 경우에 곧 종료되지 않을 것이라고 프로세서가 베팅한다고 추측 하겠지만 매번 실패합니다. 그래서, 그것은 재정렬되어야하고 너무 많은 비용이 듭니다. – thefourtheye

답변

1

차이점은 루프 초기화 코드에 있습니다. 첫 번째 코드는 내부 루프를 100,000 번 초기화해야하고 두 번째 코드는 내부 루프를 4 번만 초기화해야합니다.

+0

감사합니다. 간단하고 명확합니다. :-) –

1

코드를 분석하고이 말이 것을 볼 수 있습니다.

테스트 코드 2에서 중첩 루프는 100,000 번 붙어 있지만 외부 루프는 4 번 반복됩니다. 대신 테스트 코드 1에서 두 코드를 번갈아 사용합니다.

첫 번째 테스트 코드는 초보다 많은 작업을 실행합니다.

+0

고맙습니다. 두 답이 모두 같기 때문에 어떤 답이 녹색 틱으로 설정되었는지 모르겠습니다. 그래서 나는 약간 더 간단한 설명 인 것처럼 다른 하나를 표시합니다. 네가 괜찮 았으면 좋겠다. 추신 : 각 작업마다 비용이 들지만, 자연스러운 기능에 관해서는 xD 뒤에 뭔가있는 것을 잊어 버리는 경향이 있다는 것을 기억할 것입니다. 그래서 나처럼 초보자에게는 소중한 조언입니다. 감사합니다. –