Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

배열 합계:JavaScript에서 재귀와 for 루프 및 ES6 메서드 비교

<시간/>

많은 수의 숫자 항목이 있는 배열이 있고 단순 루프에 걸리는 시간과 ES6 함수가 배열의 모든 항목을 합산하는 데 걸리는 시간(예:재귀 대 루프 대 ES6 함수)을 비교해야 합니다. .

여기에서 큰 배열을 시뮬레이션하기 위해 비교적 작은 배열에 대해 많은 횟수(10000000 정도)를 반복합니다. 우리의 주요 목표는 각 메서드가 배열을 합산하는 데 걸리는 시간의 대략적인 비율을 파악하는 것입니다.

파트 1:재귀적 접근

const recursiveSum = (arr, len = 0, sum = 0) => {
   if(len < arr.length){
      return recursiveSum(arr, len+1, sum + arr[len]);
   };
   return sum;
};

2부:반복 접근

const loopingSum = arr => {
   let sum = 0;
   for(let i = 0; i < arr.length; i++){
      sum += arr[i];
   };
   return sum;
};

3부:ES6 접근 방식

const ES6Sum = arr => arr.reduce((acc, val) => acc+val);

이제 콘솔 메소드time() 및 timeEnd()의 도움으로 이 세 가지 함수의 성능을 비교해 보겠습니다. -

예시

const ITERATIONS = 100000000;
const arr = [12, 65, 87, 2, 23, 87, 4, 66, 34, 89, 89, 32, 4];
const recursiveSum = (arr, len = 0, sum = 0) => {
   if(len < arr.length){
      return recursiveSum(arr, len+1, sum + arr[len]);
   };
   return sum;
};
const loopingSum = arr => {
   let sum = 0;
   for(let i = 0; i < arr.length; i++){
      sum += arr[i];
   };
   return sum;
};
const ES6Sum = arr => arr.reduce((acc, val) => acc+val);
console.time('recursive approach');
for(let k = 0; k < ITERATIONS; k++){
   recursiveSum(arr);
};
console.timeEnd('recursive approach');
console.time('looping approach');
for(let l = 0; l < ITERATIONS; l++){
   loopingSum(arr);
};
console.timeEnd('looping approach');
console.time('ES6 approach');
for(let m = 0; m < ITERATIONS; m++){
   loopingSum(arr);
};
console.timeEnd('ES6 approach');

이제 가능한 콘솔 출력을 살펴보겠습니다 -

참고 − 코드의 성능은 시스템에 크게 의존하기 때문에 이것은 가능한 콘솔 출력일 뿐입니다. 그러나 이 세 가지 기능에 소요되는 시간 비율은 모든 시스템에서 거의 동일합니다.

recursive approach: 13.774s
looping approach: 3.138s
ES6 approach: 2.493s

따라서 여기에서 특정 기계에서 많은 반복에 대해 세 가지 접근 방식이 소요되는 시간을 볼 수 있습니다. 이것은 배열에 대한 더 작고 기본적인 계산의 경우 ES6 함수가 다른 어떤 접근 방식보다 더 효율적이고 성능이 우수함을 보여줍니다.

참고 − 더 나은 결과를 얻으려면 온라인 IDE에서 이 코드를 테스트하지 마십시오.