假设我们有一个包含大量Number条目的数组,并且需要比较递归时间与简单循环所花费的时间与ES6函数对数组所有条目求和所花费的时间,即递归vs for循环vs ES6功能。
在这里,为了模拟一个大数组,我们将在一个相对较小的数组上进行多次迭代(大约10000000次)。我们的主要目的只是使每种方法对数组求和的时间有一个大致的比率。
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);
现在,让我们借助控制台方法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中测试此代码。