Web Geliştirmede Performans İçin JavaScript Dosyalarını Doğru Yükleme Rehberi 🚀

thecoder

Üye
Katılım
14 Mart 2026
Mesajlar
2
Web Geliştirmede Performans İçin JavaScript Dosyalarını Doğru Yükleme Rehberi 🚀

Selam dostlar! Uzun süredir forumda takılıyorum ve performans optimizasyonu konusunda birçok soru görüyorum. Özellikle yeni başlayan arkadaşlar, harika bir site yapsalar da "Sayfam neden bu kadar yavaş açılıyor?" diye soruyorlar. Çoğu zaman sorun, JavaScript dosyalarımızı nasıl yüklediğimizde gizli. Bugün, bu kritik konuyu dostane bir dille masaya yatıralım ve sitenizi jet hızına çıkaracak pratik yöntemleri konuşalım. ⚙️

Neden JavaScript Yükleme Şekli Bu Kadar Önemli?

Tarayıcı, bir HTML sayfasını yüklerken yukarıdan aşağıya doğru okur. Bir `<script>` etiketiyle karşılaştığında, hemen durur, o script'i indirir, çalıştırır ve ancak ondan sonra sayfanın geri kalanını işlemeye devam eder. Buna **"render blocking"** (işlemi engelleme) denir. Eğer script'iniz büyükse veya yavaş bir sunucudan geliyorsa, kullanıcı boş bir beyaz ekrana bakıp kalabilir. İşte bu kötü deneyimi engellemek için aşağıdaki yöntemleri kullanıyoruz.

1. Script'leri Sayfanın En Sonuna Koymak (Klasik Yöntem)

En basit ve etkili yöntemlerden biri, tüm harici JavaScript dosyalarınızı `</body>` kapanış etiketinden hemen önce yüklemektir.

  • Avantajı: Sayfanın tüm HTML ve CSS içeriği tarayıcı tarafından işlendikten sonra script'ler yüklenir. Kullanıcı içeriği hemen görür, script'ler arka planda yüklenir.
  • Dezavantajı: Eğer script'leriniz sayfanın görünümü veya işlevselliği ile DOĞRUDAN ilgiliyse (örneğin bir menüyü açıp kapatan buton), kullanıcı önce içeriği görse de bu elementler script yüklenene kadar çalışmaz. Bu da "butona tıklıyorum ama hiçbir şey olmuyor" gibi sorunlara yol açabilir.

2. `async` ve `defer` Nitelikleri (Modern Çözüm) 💻

Bu iki nitelik, script yükleme davranışını kökten değiştirir ve genellikle en iyi çözümü sunar.

  • `async` (Asenkron):
    • Script'i indirme işlemi sayfa işlemeyi engellemez.
    • İndirilir indirilmez, hemen çalıştırılır.
    • Çalıştırılma sırası garanti edilmez. Hangi script önce inerse o önce çalışır.
    • Ne zaman kullanılır? Bağımsız, üçüncü parti script'ler için (analytics, reklam, sosyal medya widget'ları). Sayfanın geri kalanı bu script'lere bağımlı değildir.
  • `defer` (Ertelenmiş):
    • Script'i indirme işlemi sayfa işlemeyi engellemez.
    • Çalıştırılması, tüm HTML belgesi tamamen ayrıştırıldıktan sonra (DOM hazır olduğunda), fakat `DOMContentLoaded` olayından önce gerçekleşir.
    • Yazıldıkları sıraya göre çalıştırılırlar.
    • Ne zaman kullanılır? Sayfanın yapısına veya diğer script'lere bağımlı olan tüm kendi script'leriniz için ideal seçimdir. DOM manipülasyonu yapan kodlarınız buraya girer.

Hangisini Seçmeliyim? Pratik Bir Karar Ağacı

Karar vermek için kendine şu soruları sor:

  • Script, sayfanın içeriğini görüntülemek için GEREKLİ mi? (Örn: bir CSS framework'ü veya kritik bir UI bileşeni) → Hiçbir nitelik kullanma, `<head>` içinde normal yükle.
  • Script bağımsız mı ve sırası önemli değil mi? (Örn: Google Analytics) → `async` kullan.
  • Script DOM'a mı bağımlı veya diğer script'lerle sıralı mı çalışmalı? (Örn: ana uygulama kodunuz, jQuery eklentileri) → `defer` kullan.

Örnek Kullanım: En İyi Uygulama

İşte tipik bir projede `<head>` bölümünüz nasıl görünmeli:

Kod:
<head>
  <!-- Kritik CSS (inline veya hızlı yüklenen) -->
  <meta charset="UTF-8">
  <title>Harika Sitem</title>
  <link rel="stylesheet" href="styles.css">

  <!-- Sayfa için GEREKLİ OLMAYAN, bağımsız script'ler -->
  <script async src="https://www.google-analytics.com/analytics.js"></script>
  <script async src="https://platform.twitter.com/widgets.js"></script>

  <!-- Ana uygulama script'i ERTELENMİŞ olarak -->
  <script defer src="app.js"></script>
</head>

Bonus İpuçları ve Son Sözler 🎯

  • Code Splitting (Kod Bölme): Modern derleyiciler (Webpack, Vite) ile uygulamanızı küçük parçalara bölebilirsiniz. Böylece kullanıcı sadece ihtiyaç duyduğu kodu (örneğin, belirli bir sayfadaki kodu) yükler. Bu, ilk yükleme süresini inanılmaz kısaltır.
  • Lazy Loading (Tembel Yükleme): Görüntüler veya bileşenler için kullanıldığı gibi, JavaScript modüllerini de sadece ihtiyaç duyulduğunda dinamik olarak yükleyebilirsiniz (`import()` fonksiyonu ile).
  • Minify ve Sıkıştırma: Tüm bu yöntemleri uygulasanız bile, kodunuzu minify edip (boşlukları, yorumları kaldırıp) sunucunuzda Gzip/Brotli ile sıkıştırdığınızdan emin olun. Dosya boyutu her zaman en büyük düşmandır.

Umarım bu rehber, projelerinizdeki performans sorunlarını çözmenize yardımcı olur. Unutmayın, hızlı bir site mutlu kullanıcılar, daha iyi SEO sıralamaları ve daha yüksek dönüşüm oranları demektir. 💪

Deneyimlerinizi veya ek sorularınızı yorumlarda paylaşmaktan çekinmeyin. Hep birlikte öğrenelim!

İyi kodlamalar!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri