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 Incremental Static Regeneration (ISR) ile dinamik içeriği nasıl cache'ler ve güncellerim?

thedevx

Üye
Katılım
14 Mart 2026
Mesajlar
12
Merhaba arkadaşlar, bugün sizlere Next.js'te karşılaştığım en tatlı özelliklerden birini, Incremental Static Regeneration'ı (ISR) anlatacağım. Özellikle sık sık güncellenen ürün listeleri, haber siteleri veya kullanıcı yorumları gibi dinamik içeriklerde, her istekte sunucuya yüklenmektense statik sayfaların hızını nasıl koruyabileceğimizi konuşacağız. Bu hatayı ilk gördüğümde kafayı yemiştim diyebilirim, çünkü geleneksel Static Generation (SSG) ile bu tür içerikleri yönetmek imkansızdı. İşte benim kullandığım en temiz çözüm!

🔥 Karşılaştığım Sorun ve ISR'nin Gücü

Bir e-ticaret projesinde, her gün onlarca kez güncellenen fiyat ve stok bilgilerini içeren ürün detay sayfalarım vardı. Klasik `getStaticProps` ile build zamanında oluşturulan sayfalar, veri güncellendiğinde eski kalıyordu. Her seferinde yeniden build atmak da saatler sürüyordu. İşte tam burada ISR devreye giriyor. ISR, build zamanında oluşturduğun statik sayfaları, belirttiğin aralıklarla (örneğin her 10 saniyede bir) arka planda yeniden oluşturup güncellenmiş haliyle cache'liyor. Kullanıcı her zaman güncel olmasa da "yeterince güncel" ve inanılmaz hızlı bir sayfa görüyor.

⚙️ getStaticProps ile ISR'yi Aktif Etmek

ISR'yi kullanmak inanılmaz basit. `getStaticProps` fonksiyonunuzdan `revalidate` adında bir anahtar döndürmeniz yeterli. Bu değer, sayfanın kaç saniyede bir yeniden oluşturulabileceğini (revalidate) belirtir.

JavaScript:
// pages/urunler/[id].js
export async function getStaticProps(context) {
  const { params } = context;
  const urunId = params.id;

  // API'nizden veya veritabanınızdan ürün verisini çekin
  const urunVerisi = await fetch(`https://api.sitem.com/urunler/${urunId}`).then(res => res.json());

  // Eğer ürün bulunamazsa 404 sayfası göster
  if (!urunVerisi) {
    return {
      notFound: true,
    };
  }

  // BU SATIR ÇOK ÖNEMLİ: 10 saniyede bir yeniden oluşturulabilir.
  return {
    props: {
      urun: urunVerisi
    },
    revalidate: 10 // 👈 Sihir burada!
  };
}

Yukarıdaki kodda, `revalidate: 10` diyerek Next.js'e "Bu sayfanın oluşturulmuş statik halini 10 saniye boyunca sun. 10 saniye dolduktan sonra gelen ilk istekte, sayfayı arka planda yeniden oluştur ve cache'ini güncelle" talimatını vermiş oluyoruz.

🚀 Fallback ve On-Demand Revalidation (İsteğe Bağlı Yenileme)

Peki ya build zamanında oluşturmadığımız yeni bir ürün sayfasına istek gelirse? İşte burada `getStaticPaths` ile `fallback: true` veya `'blocking'` kullanıyoruz. Bu, önceden oluşturulmamış sayfalar için istek anında SSR benzeri bir oluşturma yapılmasını sağlıyor.

Daha da güzeli, On-Demand Revalidation. Diyelim ki admin panelinizden bir ürünün fiyatını değiştirdiniz ve 10 saniye beklemek istemiyorsunuz. Next.js, bir API Route'u tetikleyerek o sayfanın cache'ini anında temizlemenize izin veriyor.

JavaScript:
// pages/api/revalidate.js
export default async function handler(req, res) {
  // Gizli bir token ile isteği doğrulayın (GÜVENLİK!)
  if (req.query.secret !== process.env.MY_SECRET_TOKEN) {
    return res.status(401).json({ message: 'Geçersiz token' });
  }

  try {
    const pathToRevalidate = req.query.path; // Örn: '/urunler/123'
    await res.revalidate(pathToRevalidate); // 👈 Cache'i temizle ve yeniden oluştur
    return res.json({ revalidated: true });
  } catch (err) {
    return res.status(500).send('Revalidation hatası');
  }
}

Admin panelinizdeki "Güncelle" butonuna bu API endpoint'ini (`/api/revalidate?secret=xxx&path=/urunler/123`) çağıracak bir işlev ekleyebilirsiniz. İşte bu kadar!

🎯 Sonuç ve Performans Kazanımı

ISR sayesinde, siteniz hem statik siteler kadar hızlı hem de dinamik içerikler kadar güncel kalabiliyor. CDN'de cache'lenen sayfalar, sunucu yükünü inanılmaz azaltıyor ve ölçeklenebilirliği artırıyor. Benim projemde sayfa yükleme süreleri %70'ten fazla iyileşti ve sunucu maliyetleri düştü.

Siz Next.js'te ISR veya On-Demand Revalidation kullandınız mı? Karşılaştığınız farklı senaryolar veya daha farklı optimizasyon yöntemleriniz var 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