나는이 답변으로 넓은 그림을 제시하려고합니다.
최근에 문제를 테스트 할 때까지 괄호 안에 다음과 같은 생각이 있었습니다 .
[[ C / C ++ 와 같은 저수준 언어의 관점에서 , 변수가 0이거나 0이 아닌 경우 프로세서가 특수한 조건부 점프 명령을 갖도록 코드가 컴파일됩니다.
또한 이처럼 많은 최적화 가 필요한 경우 단일 프로세서 명령이 아니라을 의미 하기 때문에 대신 대신 갈 수 있습니다.]]
++i
i++
++i
i++
j=i+1, i=j
롤을 풀면 정말 빠른 루프를 수행 할 수 있습니다.
for(i=800000;i>0;--i)
do_it(i);
보다 느려질 수 있습니다
for(i=800000;i>0;i-=8)
{
do_it(i); do_it(i-1); do_it(i-2); ... do_it(i-7);
}
그러나 그 이유는 상당히 복잡 할 수 있습니다 (단, 게임에서 프로세서 명령 사전 처리 및 캐시 처리 문제가 있음).
요청한 JavaScript 와 같은 고급 언어의 관점 에서 라이브러리를 사용하는 경우 루프를위한 내장 함수를 최적화 할 수 있습니다. 최선의 방법을 결정하게하십시오.
결과적으로 JavaScript에서는 다음과 같은 것을 사용하는 것이 좋습니다.
array.forEach(function(i) {
do_it(i);
});
또한 오류가 적으며 브라우저는 코드를 최적화 할 수 있습니다.
[비고 : 브라우저뿐만 아니라 쉽게 최적화 할 수있는 공간도 있습니다 forEach
. 최신 브라우저를 사용하도록 기능 (브라우저에 따라 다름)을 재정의하기 만하면됩니다 ! :) @AMK 오히려 사용 가치가있다 특별한 경우라고 array.pop
하거나 array.shift
. 그렇게하면 커튼 뒤에 놓으십시오. 최대한 과잉은 에 옵션을 추가하는 것입니다 forEach
루핑 알고리즘을 선택할 수 있습니다.]
또한 저수준 언어의 경우 가능하면 복잡한 루프 작업에 스마트 라이브러리 기능을 사용하는 것이 가장 좋습니다.
이러한 라이브러리는 또한 멀티 스레드 방식으로 작업을 수행 할 수 있으며 전문 프로그래머가 최신 상태로 유지할 수 있습니다.
좀 더 면밀히 조사했으며 C / C ++에서는 5e9 = (50,000x100,000) 연산의 경우에도 @alestanis와 같이 상수에 대해 테스트를 수행하면 위아래로 차이가 없다는 것을 알 수 있습니다. (JsPerf 결과는 때때로 일치하지 않지만 대체로 동일하게 말합니다. 큰 차이를 만들 수는 없습니다.)
따라서 --i
"포쉬 한"것입니다. 더 나은 프로그래머처럼 보일뿐입니다. :)
다른 한편으로,이 5e9 상황에서 풀리려면 10 초가되면 12 초에서 2.5 초로, 20 초가되면 2.1 초로 줄었습니다. 최적화가 없었고 최적화로 인해 측정 할 수없는 작은 시간이되었습니다. :) (언 롤링은 위의 방식으로 또는를 사용하여 수행 할 수 i++
있지만 JavaScript에서 앞으로 나아갈 수는 없습니다.)
모두 모두 : KEEP i--
/ i++
과 ++i
/ i++
직업 인터뷰, 스틱에 차이가 array.forEach
사용할 수 없거나 다른 복잡한 라이브러리 함수. ;)