Βελτιστοποίηση Επαναληπτικών Λειτουργιών σε JavaScript
Ακόμα και μια ελαφριά λειτουργία, που επαναλαμβάνεται πολλές φορές σε έναν βρόχο, μπορεί να καταναλώσει πολλούς πόρους.
Ας δούμε ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε έναν συγκεκριμένο πίνακα:
let arr = [1, 2, 3, 4, 5, 6];
Ας βρούμε τον μέσο όρο των στοιχείων αυτού του πίνακα. Για να γίνει αυτό, πρέπει να βρούμε το άθροισμα των στοιχείων και να το διαιρέσουμε με τον αριθμό τους. Ας υποθέσουμε ότι κάποιος προγραμματιστής έχει ήδη λύσει αυτό το πρόβλημα με τον ακόλουθο τρόπο:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Ας εξετάσουμε τα προβλήματα αυτής της λύσης. Τεχνικά, ο κώδικας λειτουργεί σωστά και δίνει τη σωστή απάντηση. Το γεγονός είναι ότι μαθηματικά είναι σωστό τόσο να διαιρέσουμε ολόκληρο το άθροισμα με τον αριθμό, όσο και να διαιρέσουμε κάθε έναν από τους όρους ξεχωριστά με τον αριθμό.
Ωστόσο, προκύπτει ένα άλλο πρόβλημα. Το γεγονός είναι ότι θα εκτελέσουμε τη διαίρεση τόσες φορές, όσα στοιχεία υπάρχουν στον πίνακά μας. Και αποδεικνύεται ότι κάνουμε μεγάλο αριθμό περιττών πράξεων, αφού η διαίρεση θα μπορούσε να γίνει στο τέλος - μία φορά, διαιρώντας ολόκληρο το άθροισμα που βρέθηκε.
Ας βελτιστοποιήσουμε τον κώδικά μας:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Βελτιστοποιήστε τον ακόλουθο κώδικα:
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);
}
}
Βελτιστοποιήστε τον ακόλουθο κώδικα:
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);