⊗jsSpOtMm 278 of 294 menu

JavaScript'te Bellek Tüketimini Optimize Etme

Oluşturulan tüm değişkenler bilgisayarın RAM'inde saklanır. Bazen düşüncesizce yazılan kod bellek tüketimini ani bir şekilde artırabilir.

Bir örnek üzerinden inceleyelim. Önümüzde 1'den 100000000'a kadar olan tam sayıların toplamını bulma görevi olduğunu varsayalım. Bir diziyi verilen aralıktaki tam sayılarla dolduran bir fonksiyonumuz olduğunu varsayalım:

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

Ayrıca bir dizinin elemanlarının toplamını bulan bir fonksiyonumuz olduğunu varsayalım:

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

Bu fonksiyonların kombinasyonu ile verilen görevi kolayca çözebiliriz:

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

Zarif bir çözüm oldu. Ancak, içinde bir problem var: çok büyük miktarda RAM tüketiyor.

Hesaplayalım. fillArr fonksiyonu 100000000 sayı içeren bir dizi oluşturur. JavaScript'in bir sayı için 2 bayt ayırdığını varsayalım - bu durumda dizimizi saklamak için 200000000 bayt, yani yaklaşık 200 megabayt RAM gerekli olacak.

Fakat aslında, JavaScript'te bir diziyi saklarken çok fazla ek yük olduğu için çok daha fazla RAM gerekecek.

Sorunu anlayarak, görevi çözen ve neredeyse hiç RAM tüketmeyen bir fonksiyon yapmak kolaydır:

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

Görevi fonksiyonumuzla çözelim:

let sum = getNumsSum(100000000);

Bir programcının önüne, belirli bir aralıkta bulunan ve 7'ye kalansız bölünebilen sayıların miktarını bulma görevi konmuştu. Bunu şu şekilde çözdü:

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

Bu kodda neyin yanlış olduğunu açıklayın. Kodu daha optimize hale getirin.

Bir programcının önüne, bir sayının bölenlerinin toplamını bulma görevi konmuştu. Bunu şu şekilde çözdü:

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 neyin yanlış olduğunu açıklayın. Kodu daha optimize hale getirin.

Türkçe
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenЎзбекOʻzbekTiếng Việt
Web sitesinin çalışması, analiz ve kişiselleştirme için çerezleri kullanıyoruz. Veri işleme, Gizlilik Politikası'na uygun olarak gerçekleşir.
tümünü kabul et özelleştir reddet