So sánh hiệu suất 3 cách tính tổng mảng lớn: đệ quy, vòng lặp for, và ES6 reduce(). Mô phỏng mảng lớn bằng cách lặp mảng nhỏ 100 triệu lần.
Phần 1: Đệ quy
const recursiveSum = (arr, len = 0, sum = 0) => { if (len < arr.length) { return recursiveSum(arr, len + 1, sum + arr[len]); } return sum;};Phần 2: Vòng lặp
const loopingSum = arr => { let sum = 0; for (let i = 0; i < arr.length; i++) { sum += arr[i]; } return sum;};Phần 3: ES6
const ES6Sum = arr => arr.reduce((acc, val) => acc + val);
Ví dụ benchmark
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');Lưu ý - Kết quả console có thể khác nhau tùy hệ thống, nhưng tỷ lệ thời gian giữa 3 phương pháp tương đối ổn định.
recursive approach: 13.774slooping approach: 3.138sES6 approach: 2.493s
Kết luận: ES6 reduce() hiệu quả nhất cho phép tính cơ bản trên mảng.
Lưu ý - Tránh test trên IDE online để có kết quả chính xác.