Asenkron Fonksiyonların Temel Yapısı
Performans Tuzakları ve Çözümleri
Asenkron fonksiyonlar kullanırken, her `await` anahtar kelimesi, fonksiyonun sırasıyla beklemesine neden olur. Eğer bir dizi işlemde birden fazla `await` kullanıyorsanız, bu durum işleminiz sırasıyla beklemesine neden olur ve performansı olumsuz etkileyebilir. Bunun yerine, birbirinden bağımsız işlemleri paralel çalıştırmak daha hızlı bir çözüm olabilir.
Çözüm: Eğer işlemler birbirinden bağımsızsa, bu işlemleri `Promise.all()` ile paralel hale getirebilirsiniz. Bu, tüm asenkron görevlerin aynı anda başlamasına ve tamamlanmasına olanak tanır.
const promise1 = fetchData1();
const promise2 = fetchData2();
const promise3 = fetchData3();
const results = await Promise.all([promise1, promise2, promise3]);
// Bu şekilde, tüm işlemler paralel olarak çalışır ve bekleme süresi azalır.
# 2. Yanlış Kullanılmış `forEach` ve `async`
Çözüm: Asenkron bir döngü kullanmak için `for` döngüsünü veya `for...of` döngüsünü tercih edebilirsiniz. Bu sayede her bir işlemi sırayla bekleyerek düzgün bir şekilde yürütülmesini sağlarsınız.
for (const item of items) {
await processItem(item);
}
// Bu şekilde her item sırayla işlenir ve doğru sırayla beklenir.
# 3. Yavaş I/O Operasyonları
Çözüm: I/O işlemlerini öncelik sırasına göre işlemek ve gereksiz yere eş zamanlı çalışan görevlerden kaçınmak faydalı olabilir. Ayrıca, ağ isteklerinin süresini kısaltmak için önbellekleme yöntemleri de düşünülebilir.
# 4. Çok Fazla Promise Zinciri
Çözüm: Zincirlerin aşırıya kaçmaması ve mümkünse işlemleri paralel hale getirecek yöntemlerin kullanılması gereklidir. Her ne kadar Promise zincirleri okunabilirliği artırsa da, performans açısından dikkatli kullanılmalıdır.
fetchData1()
.then(result1 => {
return processData1(result1);
})
.then(processed1 => {
return fetchData2();
})
.then(result2 => {
// Devam eden zincir
});
// Bunun yerine paralel işlemlerle daha hızlı sonuç alabilirsiniz.
Performansınızı Artırmanın Yolları
- `Promise.all` ile paralel işleme geçin.
- `async/await` kullanarak hataları minimize edin.
- Asenkron işlemlerinizi öncelik sırasına göre yönetin.
- Zincirleme işlemler yerine paralel asenkron işlemler kullanın.
Bu küçük ama etkili ipuçları, JavaScript uygulamanızın hızını ciddi şekilde artırabilir.