
Her sayfa SSR olmak zorunda mı? Ya da her şey SPA hızıyla mı çalışmalı? Next.js'in sunduğu hibrit dünyada, projenizin kaderini belirleyecek olan "render" stratejilerini derinlemesine inceliyoruz.
Modern web dünyasında bir "karınca" gibi stratejik hareket etmek gerekir. Gereksiz her bayt, gereksiz her sunucu isteği koloninin enerjisini (yani bütçenizi ve performansınızı) tüketir. Next.js bize devasa bir güç verdi: Aynı uygulama içinde hem bir SPA'nın hızını hem de SSR'ın SEO gücünü yaşayabiliyoruz. Ama asıl soru şu: Hangisini, ne zaman tetiklemeliyiz?
SPA mantığında, tarayıcı boş bir HTML alır ve JavaScript her şeyi (render, data fetching, routing) üstlenir.
Ne Zaman Kullanmalı? *
🐜 Kullanıcı etkileşiminin tavan yaptığı dashboard'lar.
🐜 SEO'nun hiç önemli olmadığı, login arkası paneller.
🐜 Çok karmaşık ve anlık değişen state yapıları.
Lazy Ant Notu: Eğer uygulamanız sadece bir "tool" ise (örneğin bir fotoğraf düzenleyici), sunucuyu render ile yormayın. Bırakın kullanıcının işlemcisi çalışsın.
Her istekte (request) sayfa sunucuda hazırlanır ve tarayıcıya "hazır" bir HTML gönderilir.
Ne Zaman Kullanmalı?
🐜 İçeriğin sürekli güncellendiği haber siteleri veya borsa verileri.
🐜 Her milisaniyenin ve SEO'nun kritik olduğu e-ticaret sayfaları.
Maliyet: Her istekte sunucu CPU'su çalışır. Eğer veriniz her saniye değişmiyorsa, bu tam bir enerji israfıdır.
Next.js'i özel kılan, bu ikisi arasında seçim yapmak zorunda bırakmamasıdır. App Router ile gelen Server Components kavramı, varsayılan olarak sunucuda render edilir ama istemciye sadece gereken minimum JS'i gönderir.
Stratejik Karar Matrisi:
| Durum | Strateji | Neden? |
| :--- | :--- | :--- |
| Landing Page | SSG / ISR | En hızlı açılış, sıfır sunucu yükü. |
| Ürün Detay | SSR | Güncel fiyat ve SEO zorunluluğu. |
| Kullanıcı Ayarları | SPA (Client Side) | SEO gereksiz, hızlı etkileşim şart. |
| Blog Yazısı | ISR (Incremental Static Regeneration) | İçerik az değişir, önbellek (cache) dostudur. |
Next.js'te basit bir kuralımız var: Veriyi, olabildiğince kullanıcıya yakın olmayan yerde çek. Eğer veriyi Server Component içinde çekerseniz (await fetch(...)), bu veri istemciye hiç gitmez, doğrudan render edilmiş HTML içinde gelir. Bu, hem güvenlik (API anahtarlarının gizli kalması) hem de performans (daha az JS bundle) demektir.
Bir "Lazy Ant" asla tüm yükü tek bir tarafa yıkmaz.
SEO ve ilk açılış hızı için Server Components (SSR/SSG) kullanın.
Formlar, buton etkileşimleri ve anlık state değişimleri için adaları (Client Components) devreye sokun.
En iyi mimari, kullanıcının render edildiğini anlamadığı, sunucunun ise sadece gerektiğinde terlediği mimaridir.