⊗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
ვებსაიტის მუშაობის, ანალიტიკისა და პერსონალიზაციისთვის ვიყენებთ ქუქი-ფაილებს. მონაცემთა დამუშავება ხდება Კონფიდენციალურობის პოლიტიკის შესაბამისად.
ყველას მიღება პარამეტრები უარყოფა