JavaScript'te Döngüsel İşlemlerin Optimizasyonu
Hafif bir işlem bile, bir döngüde defalarca tekrarlandığında çok fazla kaynak tüketebilir.
Bir örnek üzerinden inceleyelim. Diyelim ki bir dizimiz var:
let arr = [1, 2, 3, 4, 5, 6];
Bu dizinin elemanlarının ortalamasını bulalım. Bunun için elemanların toplamını bulup adedine bölmek gerekir. Diyelim ki bir programcı bu sorunu zaten aşağıdaki şekilde çözmüş:
let avg = 0;
for (let elem of arr) {
avg += elem / arr.length;
}
console.log(avg);
Bu çözümün problemlerini inceleyelim. Teknik olarak kod doğru çalışıyor ve doğru cevabı veriyor. Matematiksel olarak doğru olan, hem tüm toplamı adede bölmektir, hem de her bir terimi ayrı ayrı adede bölmektir.
Ancak, başka bir problem ortaya çıkıyor. Mesele şu ki, bölme işlemini dizimizdeki eleman sayısı kadar gerçekleştireceğiz. Ve sonuçta, bölme işlemini sadece en sonda - bir kez - yapabilecekken, çok fazla sayıda gereksiz işlem yapmış oluyoruz.
Kodumuzu optimize edelim:
let sum = 0;
for (let elem of arr) {
sum += elem;
}
let avg = sum / arr.length;
console.log(avg);
Aşağıdaki kodu optimize edin:
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);
}
}
Aşağıdaki kodu optimize edin:
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);