Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

เปรียบเทียบประสิทธิภาพ forEach() และ reduce() ในการหาผลรวม - JavaScript

ทดสอบ Benchmark ระหว่าง Array.prototype.reduce() และ Array.prototype.forEach() ในการหาผลรวมอาร์เรย์ตัวเลข โดยรันซ้ำ 1,000,000,000 รอบ

โค้ดทดสอบ

const arr = [1, 4, 4, 54, 56, 54, 2, 23, 6, 54, 65, 65];

const reduceSum = arr => arr.reduce((acc, val) => acc + val);
const forEachSum = arr => {
  let sum = 0;
  arr.forEach(el => sum += el);
  return sum;
};

const iterations = 1000000000;

console.time('reduce');
for (let i = 0; i < iterations; i++) {
  let sumReduce = reduceSum(arr);
}
console.timeEnd('reduce');

console.time('forEach');
for (let j = 0; j < iterations; j++) {
  let sumForEach = forEachSum(arr);
}
console.timeEnd('forEach');

ผลลัพธ์ตัวอย่าง

reduce: 19.058s
forEach: 45.204s

สรุป

  • reduce() เร็วกว่า forEach() ประมาณ 2.4 เท่า
  • reduce เหมาะสำหรับการแปลงข้อมูล (transformation) ที่ต้องสะสมค่า
  • forEach เหมาะสำหรับ side effects (เช่น console.log, API call)

ข้อสังเกต: ผลลัพธ์อาจแตกต่างตาม JavaScript Engine (V8, SpiderMonkey, JavaScriptCore) และเวอร์ชัน