สมมติว่า เรามีอาร์เรย์ที่มีรายการ Number จำนวนมาก และจำเป็นต้องเปรียบเทียบการเรียกซ้ำของเวลากับเวลาที่วนรอบอย่างง่ายเทียบกับเวลาที่ฟังก์ชัน 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);
ตอนนี้ เรามาเปรียบเทียบประสิทธิภาพของฟังก์ชันทั้งสามนี้โดยใช้เมธอดของคอนโซลเวลา () และ 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 ออนไลน์