Tsükliliste operatsioonide optimeerimine JavaScriptis
Isegi kerge operatsioon, mida korratakse tsüklis korduvalt, võib nõuda palju ressursse.
Vaatame näidet. Olgemel on antud mingi massiiv:
let arr = [1, 2, 3, 4, 5, 6];
Leiame selle massiivi elementide keskmise. Selleks tuleb leida elementide summa ja jagada see elementide arvuga. Olgem, et mingi programmeerija on selle ülesande juba lahendanud järgmisel viisil:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Vaatleme sellise lahenduse probleeme. Tehniliselt töötab kood õigesti ja annab õige vastuse. Asi on selles, et matemaatiliselt on õige nii jagada kogu summat elementide arvuga, kui ka jagada iga liidetav elementide arvuga.
Siiski tekib teine probleem. Asi on selles, et me teostame jagamist nii mitu korda, kui palju elemente on meie massiivis. Ja selgub, et teeme palju üleliigseid tehteid, sest jagamise oleks võinud teostada lõpus - ühe korra, jagades kogu leitud summa.
Optimeerime oma koodi:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Optimeerige järgmist koodi:
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);
}
}
Optimeerige järgmist koodi:
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);