⊗jsSpOtMm 278 of 294 menu

Atminties vartojimo optimizavimas JavaScript

Visi sukurti kintamieji saugomi kompiuterio operatyviojoje atmintyje. Kartais neapgalvotas kodo rašymas gali staigiai padidinti vartojamą atmintį.

Pažiūrėkime pavyzdžiu. Tarkime, kad mums tenka rasti sveikųjų skaičių sumą nuo 1 iki 100000000. Tarkime, kad turime funkciją, kuri užpildo masyvą sveikaisiais skaičiais iš nurodyto diapazono:

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

Tarkime, kad taip pat turime funkciją, kuri randa masyvo elementų sumą:

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

Naudojant šių funkcijų derinį galima lengvai išspręsti užduotį:

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

Gavosi elegantiškas sprendimas. Jame, tačiau, yra problema: jis sunaudoja didžiulį kiekį operatyviosios atminties.

Paskaičiuokime. Funkcija fillArr sukuria masyvą su 100000000 skaičiais. Tarkime, kad JavaScript skiria skaičiui 2 baitus - tada mūsų masyvo saugojimui prireiks 200000000 baitų, tai yra maždaug 200 megabaitų operatyviosios atminties.

Bet iš tikrųjų prireiks daug daugiau operatyviosios atminties dėl to, kad JavaScript turi labai didelę papildomą apkrovą saugant masyvą.

Suprantant problemą, lengva padaryti funkciją, sprendžiančią užduotį ir praktiškai nenaudojančią operatyviosios atminties:

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

Išspręskime užduotį naudodami mūsų funkciją:

let sum = getNumsSum(100000000);

Prieš tam tikrą programuotoją buvo užduotis rasti skaičių, kurie be liekanos dalijasi iš 7, esančių nurodytame intervale, kiekį. Jis ją išsprendė taip:

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

Paaiškinkite, kas negerai su šiuo kodu. Perdarykite kodą į optimalesnį.

Prieš tam tikrą programuotoją buvo užduotis rasti skaičiaus daliklių sumą. Jis ją išsprendė taip:

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

Paaiškinkite, kas negerai su šiuo kodu. Perdarykite kodą į optimalesnį.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti