Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Next.js next/link ile client-side navigation yaparken prefetch'in nasıl çalıştığı ve performans iyileştirmesi

codrix

Üye
Katılım
14 Mart 2026
Mesajlar
50
Merhaba arkadaşlar, bugün Next.js projelerimizde sıkça kullandığımız `next/link` bileşeninin belki de en güçlü ama bazen de gizemli özelliği olan `prefetch` mekanizmasından bahsedeceğim. Bu özelliği doğru anlayıp yapılandıramadığım için, kullanıcı deneyiminin "süper akıcı" mı yoksa "gereksiz yere ağır" mı olacağına dair kafamı bir hayli ağrıtmıştım. Gelin bu sihirli düğmenin arkasında neler dönüyor, birlikte inceleyelim.

🔥 Prefetch Nedir ve Nasıl Çalışır?

Next.js'deki `next/link` bileşeni, varsayılan olarak `prefetch={true}` şeklinde gelir. Peki bu ne yapar? Sayfanızda bir `<Link>` gördüğünde, Next.js o linkin hedeflediği sayfanın JavaScript kodunu ve verilerini (getStaticProps, getServerSideProps) arka planda, kullanıcı tıklamadan önce indirmeye başlar. Bu indirme, viewport'ta görünen linkler için otomatik olarak tetiklenir.

İşte basit bir kullanımı:
JavaScript:
import Link from 'next/link';

export default function Navigation() {
  return (
    <nav>
      {/ Varsayılan: prefetch aktif /}
      <Link href="/about">Hakkımızda</Link>

      {/ Prefetch'i manuel kapatma /}
      <Link href="/contact" prefetch={false}>İletişim</Link>
    </nav>
  );
}

Buradaki sihir, kullanıcı `/about` linkinin üzerine geldiğinde veya sayfa ilk yüklendiğinde (link viewport'ta ise) yaşanıyor. Tıklama anında, sayfa zaten bellekte hazır olduğu için anında yükleniyor gibi görünüyor. İlk gördüğümde "Vay be, bu kadar hızlı nasıl oluyor?" demiştim.

⚙️ Prefetch Performansını Nasıl İyileştiririz?

Her güzel özellik gibi, bunun da dikkatli kullanılması gereken bir tarafı var. Kontrolsüz prefetch, özellikle büyük sayfalar veya çok fazla dinamik rotanız varsa, kullanıcının verisini ve sunucu kaynaklarını boş yere harcayabilir. İşte benim uyguladığım performans iyileştirme taktikleri:

1. Sadece Gerekli Yerlerde Prefetch Kullanın: Kullanıcı ana sayfadayken, "footer"daki "Gizlilik Politikası" linkini prefetch etmek pek mantıklı değil. Bu tür düşük öncelikli linklerde `prefetch={false}` kullanın.

2. Dinamik Rotalarda Dikkatli Olun: Dinamik sayfalar (`/blog/[slug]`) prefetch edilirken, `getStaticPaths`'te tanımlı tüm olası slug'lar için değil, sadece `fallback: 'blocking'` veya `true` ise ve link görünüyorsa, o spesifik slug için prefetch çalışır. Yine de çok fazla dinamik linkiniz varsa, performansı gözlemleyin.

3. Intersection Observer Threshold'unu Optimize Edin (Next.js 13+):[/COLOR] App Router'da `next/link`, bir linki ne zaman prefetch edeceğine karar verirken Intersection Observer API'sini kullanır. Varsayılan eşik değerini değiştirebilirsiniz.
JavaScript:
// app/layout.js veya app/page.js
import { Link } from 'next/link';

export default function RootLayout({ children }) {
  return (
    <html>
      <body>
        <Link
          href="/dashboard"
          // Link, viewport'a %10 girdiğinde prefetch başlasın.
          // Varsayılan değer daha yüksektir.
          scrollPrefetchThreshold={0.1}
        >
          Dashboard
        </Link>
        {children}
      </body>
    </html>
  );
}

📈 Ne Zaman Prefetch'i Kapatmalıyım?

İşte benim kullandığım en temiz çözüm, bir checklist gibi:
- Sayfa çok büyük ve ağır JS paketleri içeriyorsa (örneğin, ağır chart kütüphaneleri).
- Sayfa, kullanıcının ulaşma ihtimalinin çok düşük olduğu bir yerdeyse (sayfanın en altı, açılır menünün derinlikleri).
- Mobil ağ bağlantısını (Data Saver) önemsiyorsanız, `navigator.connection.saveData` ile kontrol edip prefetch'i dinamik olarak kapatabilirsiniz.
- Analytics veya yönetim paneli gibi, genel kullanıcı trafiğinin az olduğu özel sayfalardaki iç linkler.

Sonuç olarak, `prefetch` Next.js'in en büyük güçlerinden biri. Doğru kullanıldığında kullanıcı deneyimini uçuk seviyelere taşıyabilir. Ancak körü körüne her yerde açık bırakmak, projenizin performansını siz fark etmeden kemirebilir.

Siz Next.js projelerinizde prefetch için özel bir stratejiniz var mı? Ya da hiç beklenmedik bir prefetch sorunuyla karşılaştınız mı? Yorumlarda deneyimlerinizi paylaşın, birlikte öğrenelim!
 

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