⊗jsSpOtMm 278 of 294 menu

Atmiņas patēriņa optimizēšana JavaScript

Visas izveidotās mainīgās vērtības tiek glabātas datora operatīvajā atmiņā. Dažreiz bezrūpīgi rakstīts kods var strauji palielināt patērēto atmiņu.

Apskatīsim piemēru. Pieņemsim, ka mums ir uzdevums atrast veselu skaitļu summu no 1 līdz 100000000. Pieņemsim, ka mums ir funkcija, kas aizpilda masīvu ar veseliem skaitļiem no dotā diapazona:

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

Pieņemsim, ka mums ir arī funkcija, kas atrod masīva elementu summu:

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

Izmantojot šo funkciju kombināciju, var viegli atrisināt uzdevumu:

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

Izteiksmīgs risinājums. Tomēr tajā ir problēma: tas patērē milzīgu operatīvās atmiņas daudzumu.

Aprēķināsim. Funkcija fillArr izveido masīvu ar 100000000 skaitļiem. Pieņemsim, ka JavaScript atvēl 2 baitus uz vienu skaitli - tad mūsu masīva glabāšanai būs nepieciešami 200000000 baiti, tas ir, aptuveni 200 megabaiti operatīvās atmiņas.

Patiesībā operatīvās atmiņas būs nepieciešams daudz vairāk, jo JavaScript ir ļoti lieli pieskaitāmie izdevumi, glabājot masīvu.

Izprotot problēmu, ir viegli izveidot funkciju, kas atrisina uzdevumu un praktiski nepatērē operatīvo atmiņu:

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

Atrisināsim uzdevumu ar mūsu funkciju:

let sum = getNumsSum(100000000);

Kādam programmētājam bija uzdevums atrast skaitļu skaitu, kas dalās bez atlikuma ar 7, atrodoties noteiktā intervālā. Viņš to atrisināja šādi:

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

Paskaidrojiet, kas šajā kodā ir nepareizi. Pārveidojiet kodu uz optimālāku.

Kādam programmētājam bija uzdevums atrast skaitļa dalītāju summu. Viņš to atrisināja šādi:

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

Paskaidrojiet, kas šajā kodā ir nepareizi. Pārveidojiet kodu uz optimālāku.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt