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'te next/link ile client-side navigation yaparken prefetch'in nasıl çalıştığı ve performans etkisi

devron

Üye
Katılım
14 Mart 2026
Mesajlar
19
Merhaba arkadaşlar, bugün Next.js projelerimizde neredeyse her gün kullandığımız `next/link` bileşeninin belki de en güçlü ama en az konuşulan özelliğinden bahsedeceğim: prefetch. Bu özelliği doğru anlamadan linkleri kullanmak, ya performansı boşa harcamak ya da kullanıcı deneyimini göz ardı etmek anlamına gelebilir. İşte benim bu konuda öğrendiklerim ve uyguladığım stratejiler.

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

Next.js'te `<Link>` bileşeninin varsayılan davranışı, viewport'ta görünen bir linki otomatik olarak prefetch etmektir. Bu ne demek? Tarayıcınız, sayfayı kaydırırken, siz tıklamadan önce, o linkin hedeflediği sayfanın JavaScript'ini, verilerini (getStaticProps, getServerSideProps) ve hatta iç içe rotaların dosyalarını sessizce arka planda indirmeye başlar.

Bu, kullanıcı linke tıkladığında, sayfanın neredeyse anında yüklenmesini sağlar çünkü tüm gerekli kaynaklar önceden hazırdır. Prefetch işlemi sadece production build'de (`next build` & `next start`) ve tarayıcının boşta olduğu anlarda çalışır, geliştirme modunda aktif değildir.

⚙️ Prefetch'i Kontrol Etmek

Her linki prefetch etmek her zaman iyi değil. Örneğin, bir kullanıcının tıklama ihtimali çok düşük olan onlarca link varsa veya mobil data kullanımından endişe ediyorsanız, prefetch'i kısıtlamak isteyebilirsiniz. İşte burada `prefetch` prop'u devreye giriyor.

JavaScript:
import Link from 'next/link';

// 1. Varsayılan: Prefetch aktif (viewport'ta görününce)
<Link href="/blog/yazi-1">Yazı 1</Link>

// 2. Prefetch'i tamamen devre dışı bırak
<Link href="/blog/yazi-2" prefetch={false}>
  Yazı 2 (Prefetch Yok)
</Link>

Prefetch'i devre dışı bırakmak, özellikle kullanıcı etkileşimiyle (örneğin, bir butona tıklandığında) açılan modal veya detay sayfaları için faydalıdır.

📈 Performans İpuçları ve En İyi Uygulamalar

Prefetch'in gücünden en iyi şekilde yararlanmak için birkaç taktik paylaşayım:

1. Dinamik Rotalarda Dikkat: `href` prop'u dinamik olduğunda (`/blog/[slug]`), Next.js prefetch sırasında getStaticPaths'ten dönen tüm sayfaları değil, sadece `as` prop'u ile belirttiğiniz konkret URL'i prefetch eder. Eğer `as` kullanmazsanız, prefetch çalışmaz.

JavaScript:
// Bu, "/blog/nextjs-prefetch-guide" sayfasını prefetch eder.
<Link
  href="/blog/[slug]"
  as="/blog/nextjs-prefetch-guide"
>
  Prefetch Rehberi
</Link>

2. Görünürlüğü Kontrol Edin: Sayfanızda çok fazla link varsa (örneğin, bir ürün galerisi), sadece ilk birkaç tanesini veya kullanıcının görmesi en muhtemel olanları prefetch'te bırakın. Diğerleri için `prefetch={false}` kullanın. Bunu bir "görüntüleme oranı" (intersection ratio) hook'u yazarak da otomatikleştirebilirsiniz.

3. Önemli İlk Tıklamaları Hedefleyin: Kullanıcı yolculuğunda (user journey) sonraki en olası sayfayı (örneğin, bir ürün listesinden detay sayfasına) prefetch etmeye öncelik verin. Bu, sitenizin "anında" hissini dramatik şekilde artırır.

💎 Sonuç ve Düşünceler

`next/link` prefetch'i, Next.js'in en büyük "sihirli" özelliklerinden biri. Doğru kullanıldığında, sitenizin performansını ve kullanıcı deneyimini rakiplerinizin bir adım önüne taşıyabilir. Ancak körü körüne tüm linklerde açık bırakmak, özellikle büyük sayfaları olan projelerde gereksiz bant genişliği kullanımına yol açabilir.

Sizin Next.js projelerinizde prefetch konusunda bir stratejiniz var mı? Özellikle büyük ölçekli uygulamalarda hangi linkleri prefetch etmeye değer buluyorsunuz? Ya da prefetch'ten kaynaklı beklenmedik bir sorunla karşılaştınız mı? Yorumlarda deneyimlerinizi paylaşın, tartışalım!
 

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