⊗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
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан