• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

reduce 효울성 차이 질문

20.05.23 19:45 작성 조회수 137

0

강의에서 본것처럼

const reduce2 = (f,acc,iter=> {
      
      if(!iter){
        iter = acc[Symbol.iterator]();
        acc = iter.next().value;
      }
      for(const a of iter){
        acc = f(acc,a);
      }
      return acc
   }

아래와 같이 이용해서

test('range',10,() => reduce2(add,range(10000000)));
test('Lrange',10,() => reduce2(add,L.range(10000000)));

이 코드를 실행했을떄는 L.range가 성능이 빠른것을 확인했습니다.

비슷하게 아래와 같이 코드 작성후 성능 확인을 했을경우 range함수가 L.range함수보다 빠르게 나오는 이유가 궁금합니다.

test('range',10,() => [...range(1000000)].reduce(add));
test('Lrange',10,() => [...L.range(1000000)].reduce(add));

답변 1

답변을 작성해보세요.

4

후자의 경우는 둘다 큰 차이가 없는 동작이 이루어집니다. Array.prototpe.reduce 를 사용하고 있기 때문입니다. Array.prototype.reduce 는 빅 사이즈 Array를 먼저 만든 다음 다시 처음부터 모두 순회해야하기 때문입니다.

전자가 차이가 나는 이유는 하나는 빅사이즈 Array를 만든 처음부터 다시 순회를 하고 하나는 빅사이즈 Array를 만들지 않은 상태에서 iterator를 reduce2 안에서 순회하기 때문입니다. 

감사합니다 :)