Cikliškų operacijų optimizavimas JavaScript
Net ir lengva operacija, daug kartų kartojama cikle, gali atimti daug resursų.
Pažiūrėkime pavyzdžiu. Tarkime, kad turime tam tikrą masyvą:
let arr = [1, 2, 3, 4, 5, 6];
Raskime šio masyvo elementų vidurkį. Norint tai padaryti, reikia rasti elementų sumą ir padalinti ją iš jų kiekio. Tarkime, kad koks nors programuotojas jau išsprendė šią užduotį taip:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Panagrinėkime šio sprendimo problemas. Techniškai kodas veikia teisingai ir pateikia teisingą atsakymą. Esmė ta, kad matematiškai teisinga ir padalinti visą sumą iš kiekio, ir padalinti kiekvieną dėmenį atskirai iš kiekio.
Tačiau iškyla kita problema. Esmė ta, kad mes atliksime dalybą tiek kartų, kiek elementų yra mūsų masyve. Ir pasirodo, kad mes darome daug nereikalingų operacijų, juk dalybą galima buvo atlikti pabaigoje - vieną kartą, padalinus visą rastą sumą.
Optimizuokime mūsų kodą:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Optimizuokite šį kodą:
for (let i = 1900; i <= 2100; i++) {
let curr = new Date;
let date = new Date(i, curr.getMonth(), curr.getDate());
if (curr.getDay() === date.getDay()) {
console.log(date);
}
}
Optimizuokite šį kodą:
let obj = {a: 10, b: 20, c: 30, d: 40, e: 50};
let sum = 0;
for (let key in obj) {
if (String(obj[key])[0] === '1' || String(obj[key])[0] === '2') {
sum += obj[key];
}
}
console.log(sum);