⊗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हिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել