많은 수의 숫자 항목이 있는 배열이 있고 단순 루프에 걸리는 시간과 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에서 이 코드를 테스트하지 마십시오.