JavaScript Event Loop: Temel Kavramlar ve İşleyiş
Event Loop, JavaScript’in asenkron yapısını yönetmek için kullanılan bir mekanizmadır. JavaScript tek iş parçacıklı (single-threaded) bir dil olduğu için, aynı anda birden fazla işlem yapamaz. Ancak, Event Loop sayesinde, uzun süren işlemler (örneğin ağ istekleri, zamanlayıcılar) çalışırken, ana iş parçacığı diğer görevleri yerine getirebilir. Bu sayede, JavaScript uygulamaları kullanıcı etkileşiminden bağımsız olarak hızlı ve verimli çalışabilir.
Event Loop ve Call Stack İlişkisi: Zihin Haritası
Şema:
1. Call Stack: JavaScript'in sırasıyla çalıştırdığı fonksiyonlar.
2. Callback Queue: Asenkron fonksiyonların beklediği kuyruk.
3. Event Loop: Call Stack’in boşalmasını bekler, sonra Callback Queue’den bir fonksiyon alır.
Asenkron Programlamanın Gücü: Callback'ler, Promises ve Async/Await
1. Callback Fonksiyonları: Bir fonksiyonun içinde başka bir fonksiyon çağrılır. Bu, özellikle eski JavaScript kodlarında sıkça görülen bir yöntemdir.
kopyalasetTimeout(function() { console.log("10 saniye geçti!"); }, 10000); // 10 saniye sonra çalışacak
2. Promises: Callback'lerin getirdiği karmaşıklığı azaltmak için kullanılan bir yapıdır. Promises, işlemler tamamlandığında sonuçları yönetmeyi sağlar.
kopyalalet promise = new Promise(function(resolve, reject) { let success = true; // işlem başarılı mı? if (success) { resolve("Başarıyla tamamlandı!"); } else { reject("Bir hata oluştu."); } }); promise.then(function(result) { console.log(result); }).catch(function(error) { console.log(error); });
3. Async/Await: Modern JavaScript’te asenkron işlemleri daha da kolaylaştıran bir yapıdır. `async` fonksiyonları, `await` ile asenkron işlemlerin sonuçlarını bekleyebilir. Bu, daha temiz ve okunabilir kodlar yazmanızı sağlar.
kopyalaasync function fetchData() { try { let response = await fetch('https://api.example.com/data'); let data = await response.json(); console.log(data); } catch (error) { console.log("Bir hata oluştu: ", error); } } fetchData();
Event Loop ve Performans: Kodunuzu Hızlandırın
Bir uygulama düşünün; eğer kullanıcılar bir sayfa üzerinde uzun süre beklemek zorunda kalırlarsa, bu hem kullanıcıyı sıkabilir hem de uygulamanın performansını olumsuz etkiler. Ancak, Event Loop’un gücünden faydalanarak bu tür sorunları önleyebilirsiniz.
Event Loop Sık Yapılan Hatalar ve Çözümleri
- Callback Hell (Callback Cehennemi): Birçok callback fonksiyonu iç içe geçmişse, kodunuz karmaşık ve zor okunabilir hale gelir. Çözüm: Promises veya async/await kullanarak kodunuzu düzene sokabilirsiniz.
- Deadlock Durumları: Asenkron işlemlerde bazen kod bir bekleme durumuna girer ve hiçbir şey çalışmaz. Çözüm: İşlem sırasını iyi yönetmek ve her asenkron işlemi doğru bir şekilde senkronize etmek gereklidir.
- UI Bloklama: JavaScript tek iş parçacıklı bir dil olduğundan, uzun süreli işlemler UI’yi bloke edebilir. Çözüm: İşlem süresi uzun olan kodları Web Workers ile paralel çalıştırabilir, kullanıcı etkileşimine zarar vermemiş olursunuz.