⊗jsSpOtMm 278 of 294 menu

การปรับปรุงการใช้หน่วยความจำใน JavaScript

ตัวแปรทั้งหมดที่สร้างขึ้นจะถูกเก็บไว้ ในหน่วยความจำแรมของคอมพิวเตอร์ บางครั้งการเขียนโค้ดโดยไม่ไตร่ตรอง อาจทำให้การใช้หน่วยความจำเพิ่มขึ้นอย่างรวดเร็ว

ลองมาดูตัวอย่างกัน สมมติว่าเรามีงานคือหาผลรวมของจำนวนเต็มจาก 1 ถึง 100000000 สมมติว่าเรามีฟังก์ชัน ที่เติมอาร์เรย์ด้วยจำนวนเต็ม จากช่วงที่กำหนด:

function fillArr(a, b) { let res = []; for (let i = a; i <= b; i++) { res.push(i); } return res; }

สมมติว่าเรายังมีฟังก์ชัน ที่หาผลรวมขององค์ประกอบ อาร์เรย์:

function getSum(arr) { let sum = 0; for (let elem of arr) { sum += elem } return sum; }

ด้วยการรวมฟังก์ชันเหล่านี้ เราสามารถแก้ปัญหาที่ได้รับมอบหมายได้อย่างง่ายดาย:

let sum = getSum(fillArr(1, 100000000));

มันกลายเป็นโซลูชันที่สง่างาม อย่างไรก็ตาม มีปัญหา: มันใช้หน่วยความจำแรมจำนวนมหาศาล

ลองคำนวณดู ฟังก์ชัน fillArr สร้างอาร์เรย์ที่มี 100000000 ตัวเลข สมมติว่า JavaScript จองพื้นที่สำหรับตัวเลขละ 2 ไบต์ - ดังนั้นสำหรับการจัดเก็บอาร์เรย์ของเราจะต้องใช้ 200000000 ไบต์ ซึ่งก็คือประมาณ 200 เมกะไบต์ของหน่วยความจำแรม

แต่ในความเป็นจริง จะต้องใช้หน่วยความจำแรมมากกว่านั้น เพราะใน JavaScript มีค่าใช้จ่ายสูงมาก สำหรับการจัดเก็บอาร์เรย์

เมื่อเข้าใจปัญหาแล้ว ก็ง่ายที่จะสร้างฟังก์ชัน ที่แก้ปัญหาและแทบไม่ใช้ หน่วยความจำแรมเลย:

function getNumsSum(max) { let sum = 0; for (let i = 1; i <= max; i++) { sum += i; } return sum; }

มาแก้ปัญหาด้วยฟังก์ชันของเรากัน:

let sum = getNumsSum(100000000);

โปรแกรมเมอร์คนหนึ่งได้รับมอบหมายให้หาจำนวนตัวเลข ที่หารลงตัวด้วย 7 ภายในช่วงที่กำหนด เขาทำได้ดังนี้:

let arr = []; for (let i = 0; i <= 1000; i++) { if (i % 7 == 0) { arr.push(i); } } console.log(arr.length);

อธิบายว่าอะไรผิดปกติกับโค้ดนี้ จัดการโค้ดใหม่ ให้เหมาะสมกว่าเดิม

โปรแกรมเมอร์คนหนึ่งได้รับมอบหมายให้หาผลรวมของตัวหารของตัวเลข เขาทำได้ดังนี้:

function getDivisors(num) { let res = []; for (let i = 1; i <= num; i++) { if (num % i === 0) { res.push(i); } } return res; } function getSum(arr) { let sum = 0; for (let elem of arr) { sum += elem } return sum; } let sum = getSum(getDivisors(320)); console.log(sum);

อธิบายว่าอะไรผิดปกติกับโค้ดนี้ จัดการโค้ดใหม่ ให้เหมาะสมกว่าเดิม

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ