Giriş
JavaScript performansı sadece framework seçimiyle ilgili değildir. Frontend tarafındaki akıcılığın büyük bölümü; asenkron işleri, event akışlarını, state geçişlerini ve render baskısını nasıl yönettiğinize bağlıdır.
İleri seviye JavaScript teknikleri, arayüz daha etkileşimli hâle geldikçe bile uygulamaların hızlı kalmasına yardımcı olur.
1. Asenkron programlama
Modern uygulamalar zamanının büyük bölümünü ağ yanıtı, timer ve tarayıcı olayı bekleyerek geçirir. async/await, bu akışı çok daha okunabilir kılar.
async function fetchData() {
try {
const response = await fetch("/api/data");
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
Neden önemli?
- asenkron kod daha rahat okunur,
- hata yönetimi daha açık hâle gelir,
- callback zincirleri azalır.
2. Closure kullanımı
Closure, bir fonksiyonun kendi lexical scope’undaki değişkenleri hatırlamasını sağlar.
function createCounter() {
let count = 0;
return function () {
count += 1;
return count;
};
}
Encapsulation, factory fonksiyonlar ve küçük stateful yardımcılar için oldukça kullanışlıdır.
3. Event delegation
Her elemana ayrı event listener bağlamak zamanla maliyetli ve yönetmesi zor hâle gelebilir. Event delegation, listener’ı DOM ağacında daha üst bir elemana taşır.
document.getElementById("list").addEventListener("click", event => {
if (event.target.matches(".item")) {
console.log(event.target.dataset.id);
}
});
Bu yaklaşım özellikle sık eklenen veya silinen dinamik listelerde çok faydalıdır.
4. Debounce ve throttle
Bazı tarayıcı event’leri çok sık tetiklenir ve doğrudan işlemek maliyetli olabilir.
İyi örnekler:
scrollresizeinput- fare hareketleri
Debounce
Kullanıcı tetiklemeyi bıraktıktan sonra işlemi bir kez yapmak istediğinizde debounce kullanın.
Throttle
Olayı kontrollü aralıklarla işlemek istediğinizde throttle kullanın.
İki yaklaşım da render ve ağ performansını korumaya yardımcı olur.
5. Modüler kod yapısı
JavaScript kod tabanları büyüdükçe performans problemleri çoğu zaman önce bakım problemi olarak ortaya çıkar.
Yararlı alışkanlıklar:
- sorumlulukları modüllere ayırmak,
- sadece tarayıcıya özel davranışları izole etmek,
- global state’i azaltmak,
- DOM işlemlerini lokal tutmak.
Anlaması daha kolay olan kod tabanı, çoğu zaman optimize etmesi de daha kolay olan kod tabanıdır.
6. Değişiklikten önce ölçün
Performans çalışması kanıta dayanmalıdır.
Şunlara bakın:
- render sıklığı,
- event hacmi,
- ağ waterfall’ları,
- büyük bundle maliyeti,
- tekrar eden DOM işlemleri.
İleri teknikler en çok, ölçülmüş bir problemi çözdüklerinde anlamlıdır.
Sonuç
Yüksek performanslı web uygulamaları, küçük ama disiplinli kararların birleşimiyle ortaya çıkar. Asenkron akış yönetimi, closure, event delegation, debounce, throttle ve modüler tasarım farklı sürtünme noktalarını azaltır.
Bu teknikler bilinçli uygulandığında, ürün karmaşıklığı artsa bile JavaScript uygulamaları akıcı kalabilir.