⊗jsSpOtMm 278 of 294 menu

Tối ưu hóa việc tiêu thụ bộ nhớ trong JavaScript

Tất cả các biến được tạo ra đều được lưu trữ trong bộ nhớ RAM của máy tính. Đôi khi việc viết code không suy nghĩ có thể làm tăng đột ngột bộ nhớ được sử dụng.

Hãy cùng xem một ví dụ. Giả sử chúng ta có nhiệm vụ tìm tổng các số nguyên từ 1 đến 100000000. Giả sử chúng ta có một hàm điền vào một mảng với các số nguyên từ một khoảng cho trước:

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

Giả sử chúng ta cũng có một hàm tính tổng các phần tử của mảng:

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

Bằng cách kết hợp các hàm này, chúng ta có thể dễ dàng giải quyết nhiệm vụ đã đặt ra:

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

Đó là một giải pháp thanh lịch. Tuy nhiên, trong nó có một vấn đề: nó tiêu thụ một lượng bộ nhớ RAM khổng lồ.

Hãy cùng tính toán. Hàm fillArr tạo ra một mảng với 100000000 số. Giả sử JavaScript cấp phát 2 byte cho một số - khi đó để lưu trữ mảng của chúng ta sẽ cần 200000000 byte, tức là khoảng 200 megabyte bộ nhớ RAM.

Nhưng trên thực tế, sẽ cần nhiều bộ nhớ RAM hơn do trong JavaScript có chi phí phụ trội rất lớn khi lưu trữ mảng.

Hiểu được vấn đề, chúng ta có thể dễ dàng tạo ra một hàm giải quyết nhiệm vụ và hầu như không tiêu thụ bộ nhớ RAM:

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

Hãy giải quyết nhiệm vụ bằng hàm của chúng ta:

let sum = getNumsSum(100000000);

Một lập trình viên có nhiệm vụ tìm số lượng các số chia hết cho 7, nằm trong một khoảng cho trước. Anh ta đã giải quyết nó như sau:

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

Hãy giải thích, điều gì không ổn với code này. Hãy sửa lại code để tối ưu hơn.

Một lập trình viên có nhiệm vụ tìm tổng các ước số của một số. Anh ta đã giải quyết nó như sau:

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);

Hãy giải thích, điều gì không ổn với code này. Hãy sửa lại code để tối ưu hơn.

Tiếng Việt
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ʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối