Ciklisko operāciju optimizācija JavaScript
Pat viegla operācija, kas atkārtota ciklā daudz reižu, var aizņemt daudz resursu.
Apskatīsim piemērā. Pieņemsim, ka mums ir dots kāds masīvs:
let arr = [1, 2, 3, 4, 5, 6];
Atradīsim šī masīva elementu vidējo vērtību. Lai to izdarītu, jāatrod elementu summa un jādala to ar elementu skaitu. Pieņemsim, ka kāds programmētājs jau atrisināja šo uzdevumu šādi:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Izpētīsim šāda risinājuma problēmas. Tehniski kods darbojas pareizi un sniedz pareizo atbildi. Lieta ir tāda, ka matemātiski korekti ir gan dalīt visu summu ar skaitu, gan dalīt katru no saskaitāmajiem ar skaitu.
Tomēr rodas cita problēma. Lieta ir tāda, ka mēs veiksim dalīšanu tik reižu, cik elementu ir mūsu masīvā. Un iznāk, ka mēs darām lielu skaitu lieku operāciju, jo dalīšanu varēja izpildīt beigās - vienu reizi, visu atrasto summu dalot.
Optimizēsim mūsu kodu:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Optimizējiet šādu kodu:
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);
}
}
Optimizējiet šādu kodu:
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);