Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tổng mảng: So sánh đệ quy vs vòng lặp vs ES6 trong JavaScript

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.