⊗jsSpOtMm 278 of 294 menu

JavaScriptda xotira sarfini optimallashtirish

Yaratilgan barcha o‘zgaruvchilar kompyuterning operativ xotirasida saqlanadi. Ba’zan beparvo kod yozish xotira sarfini keskin oshirishi mumkin.

Keling, buni misol orqali ko‘rib chiqaylik. Faraz qilaylik, bizning vazifamiz 1 dan 100000000 gacha bo‘lgan butun sonlar yig‘indisini topish. Faraz qilaylik, bizda berilgan oraliqdagi butun sonlar bilan massivni to‘ldiruvchi funksiya bor:

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

Faraz qilaylik, shuningdek, massiv elementlari yig‘indisini topadigan funksiya ham bor:

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

Ushbu funksiyalarning kombinatsiyasi yordamida berilgan vazifani osongina hal qilish mumkin:

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

Yechim nafis bo‘ldi. Biroq, unda muammo bor: u juda ko‘p operativ xotira sarflaydi.

Keling, hisoblaylik. fillArr funksiyasi 100000000 ta son bilan massiv yaratadi. Faraz qilaylik, JavaScript son uchun 2 bayt ajratadi - unda bizning massivimizni saqlash uchun 200000000 bayt, ya’ni taxminan 200 megabayt operativ xotira kerak bo‘ladi.

Lekin aslida operativ xotira ko‘proq talab qilinadi, chunki JavaScript-da massivni saqlashda juda katta qo‘shimcha xarajatlar bor.

Muammoni tushunib, vazifani hal qiladigan va amalda operativ xotira sarflamaydigan funksiyani yasash oson:

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

Keling, vazifani ushbu funksiya yordamida hal qilaylik:

let sum = getNumsSum(100000000);

Bir dasturchi oldiga 7 ga qoldiqsiz bo‘linadigan, berilgan oraliqda joylashgan sonlar miqdorini topish vazifasi qo‘yilgan edi. U uni quyidagicha hal qildi:

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

Ushbu kodda nima noto‘g‘ri ekanligini tushuntiring. Kodni yanada optimalroq qilib qayta yozing.

Bir dasturchi oldiga sonning bo‘luvchilari yig‘indisini topish vazifasi qo‘yilgan edi. U uni quyidagicha hal qildi:

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

Ushbu kodda nima noto‘g‘ri ekanligini tushuntiring. Kodni yanada optimalroq qilib qayta yozing.

Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish