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);
Бұл кодта не дұрыс емес екенін түсіндіріңіз. Кодты оңтайлырақ етіп өзгертіңіз.