⊗jsSpOtMm 278 of 294 menu

JavaScript-də Yaddaş İstehlakının Optimallaşdırılması

Yaradılmış bütün dəyişənlər kompüterin operativ yaddaşında saxlanılır. Bəzən düşünmədən yazılan kod istifadə olunan yaddaşın miqdarını kəskin şəkildə artıra bilər.

Gəlin bir nümunəyə baxaq. Tutaq ki, bizim vəzifəmiz 1-dən 100000000-dək tam ədədlərin cəmini tapmaqdır. Tutaq ki, bizdə massivi verilmiş aralıqdakı tam ədədlərlə dolduran funksiya var:

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

Tutaq ki, bizdə həmçinin massivin elementlərinin cəmini tapan funksiya da var:

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

Bu funksiyaların birləşməsindən istifadə etməklə qarşıya qoyulmuş vəzifəni asanlıqla həll etmək olar:

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

Zərif bir həll oldu. Lakin onun problemi var: çox böyük miqdarda operativ yaddaş istehlak edir.

Gəlin hesablayaq. fillArr funksiyası 100000000 ədədi olan massiv yaradır. Tutaq ki, JavaScript bir ədəd üçün 2 bayt ayırır - onda bizim massivi saxlamaq üçün 200000000 bayt, yəni təxminən 200 meqabayt operativ yaddaş lazımdır.

Əslində isə, JavaScript-də massivin saxlanması zamanı çox böyük əlavə xərclər olduğundan, daha çox operativ yaddaş tələb olunacaq.

Problemi başa düşməklə, vəzifəni həll edən və praktiki olaraq operativ yaddaş istehlak etməyən funksiya yaratmaq asandır:

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

Gəlin vəzifəni bizim funksiyamızla həll edək:

let sum = getNumsSum(100000000);

Müəyyən bir proqramçının qarşısında verilmiş aralıqda yerləşən, 7-ə qalıqsız bölünən ədədlərin sayını tapmaq vəzifəsi dururdu. O, onu aşağıdakı kimi həll etdi:

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

Bu kodda nəyin səhv olduğunu izah edin. Kodu daha optimal olaraq dəyişdirin.

Müəyyən bir proqramçının qarşısında ədədin bölənlərinin cəmini tapmaq vəzifəsi dururdu. O, onu aşağıdakı kimi həll etdi:

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

Bu kodda nəyin səhv olduğunu izah edin. Kodu daha optimal olaraq dəyişdirin.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČ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
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et