Server Components

React Sunucu Bileşenleri, sunucuda render edilebilen ve isteğe bağlı olarak önbelleğe alınabilen kullanıcı arayüzü yazmanıza olanak tanır. Next.js'de render işi, akış ve kısmi render'ı etkinleştirmek için rota segmentleri ile daha da bölünmüştür ve üç farklı sunucu render stratejisi vardır:

Bu sayfada Sunucu Bileşenlerinin nasıl çalıştığı, ne zaman kullanabileceğiniz ve farklı sunucu işleme stratejileri ele alınacaktır.

Benefits of Server Rendering

Render işini sunucu üzerinde yapmanın birkaç avantajı vardır:

Using Server Components in Next.js

Next.js varsayılan olarak Sunucu Bileşenlerini kullanır. Bu, ek yapılandırma olmadan sunucu oluşturmayı otomatik olarak uygulamanıza olanak tanır ve gerektiğinde İstemci Bileşenlerini kullanmayı seçebilirsiniz, bkz.

How are Server Components rendered?

Sunucuda Next.js, render işlemini düzenlemek için React'in API'lerini kullanır. Oluşturma işi parçalara ayrılır: bireysel rota segmentlerine ve Askıya Alma Sınırlarına göre .

Her yığın iki adımda oluşturulur:

  1. React, Sunucu Bileşenlerini React Sunucu Bileşeni Yükü (RSC Payload) adı verilen özel bir veri biçiminde işler.
  2. Next.js, sunucuda HTML oluşturmak için RSC Payload ve Client Component JavaScript talimatlarını kullanır.

Sonra, müşteride:

  1. HTML, rotanın etkileşimli olmayan hızlı bir önizlemesini hemen göstermek için kullanılır - bu yalnızca ilk sayfa yüklemesi içindir.
  2. React Sunucu Bileşenleri Yükü, İstemci ve Sunucu Bileşen ağaçlarını uzlaştırmak ve DOM'u güncellemek için kullanılır.
  3. JavaScript talimatları İstemci Bileşenlerini sulandırmak ve uygulamayı etkileşimli hale getirmek için kullanılır.

React Server Bileşen Yükü (RSC) nedir?

RSC Payload, işlenmiş React Server Bileşenleri ağacının kompakt bir ikili gösterimidir. Tarayıcının DOM'unu güncellemek için istemcide React tarafından kullanılır. RSC Payload şunları içerir:

  • Sunucu Bileşenlerinin işlenmiş sonucu
  • İstemci Bileşenlerinin nerede işlenmesi gerektiğine ilişkin yer tutucular ve JavaScript dosyalarına referanslar
  • Bir Sunucu Bileşeninden bir İstemci Bileşenine aktarılan tüm proplar

Server Rendering Strategies

Sunucu görüntülemenin üç alt kümesi vardır: Statik, Dinamik ve Akış.

Static Rendering (Default)

Statik Rendering ile rotalar derleme zamanında veya veri yeniden doğrulamasından sonra arka planda oluşturulur. Sonuç önbelleğe alınır ve bir İçerik Dağıtım Ağına (CDN) gönderilebilir. Bu optimizasyon, oluşturma işinin sonucunu kullanıcılar ve sunucu istekleri arasında paylaşmanıza olanak tanır.

Statik oluşturma, bir rota kullanıcıya göre kişiselleştirilmemiş ve statik bir blog gönderisi veya ürün sayfası gibi derleme zamanında bilinebilecek verilere sahip olduğunda kullanışlıdır.

Dynamic Rendering

Dinamik Rendering ile rotalar her kullanıcı için istek anında oluşturulur.

Dinamik oluşturma, bir rota kullanıcıya göre kişiselleştirilmiş verilere sahip olduğunda veya çerezler ya da URL'nin arama parametreleri gibi yalnızca istek sırasında bilinebilecek bilgilere sahip olduğunda kullanışlıdır.

Önbelleğe Alınmış Verilerle Dinamik Rotalar

Çoğu web sitesinde rotalar tamamen statik veya tamamen dinamik değildir - bu bir spektrumdur. Örneğin, belirli aralıklarla yeniden doğrulanan önbelleğe alınmış ürün verilerini kullanan bir e-ticaret sayfanız olabilir, ancak aynı zamanda önbelleğe alınmamış, kişiselleştirilmiş müşteri verilerine de sahip olabilirsiniz.

Next.js'de, hem önbelleğe alınmış hem de önbelleğe alınmamış verilere sahip dinamik olarak oluşturulmuş rotalarınız olabilir. Bunun nedeni, RSC Payload'unun ve verilerin ayrı ayrı önbelleğe alınmasıdır. Bu, istek zamanında tüm verileri getirmenin performans etkisi hakkında endişelenmeden dinamik oluşturmayı tercih etmenize olanak tanır.

Tam yol önbelleği ve Veri Önbelleği hakkında daha fazla bilgi edinin.

Switching to Dynamic Rendering

Oluşturma sırasında, dinamik bir işlev veya önbelleğe alınmamış veri isteği keşfedilirse, Next.js tüm rotayı dinamik olarak oluşturmaya geçecektir. Bu tablo, dinamik işlevlerin ve veri önbelleğe almanın bir rotanın statik veya dinamik olarak işlenmesini nasıl etkilediğini özetlemektedir:

Dynamic FunctionsDataRoute
NoCachedStatically Rendered
YesCachedDynamically Rendered
NoNot CachedDynamically Rendered
YesNot CachedDynamically Rendered

Yukarıdaki tabloda, bir rotanın tamamen statik olması için tüm verilerin önbelleğe alınması gerekir. Ancak, hem önbelleğe alınmış hem de önbelleğe alınmamış veri getirmelerini kullanan dinamik olarak oluşturulmuş bir rotanız olabilir.

Next.js, kullanılan özelliklere ve API'lere göre her rota için en iyi işleme stratejisini otomatik olarak seçeceğinden, bir geliştirici olarak statik ve dinamik işleme arasında seçim yapmanız gerekmez. Bunun yerine, belirli verileri ne zaman önbelleğe alacağınızı veya yeniden doğrulayacağınızı seçersiniz ve kullanıcı arayüzünüzün bazı bölümlerini yayınlamayı seçebilirsiniz.

Dynamic Functions

Dinamik fonksiyonlar, kullanıcının çerezleri, mevcut istek başlıkları veya URL'nin arama paramları gibi yalnızca istek sırasında bilinebilecek bilgilere dayanır. Next.js'de bu dinamik fonksiyonlar şunlardır:

Bu işlevlerden herhangi birinin kullanılması, istek zamanında tüm rotayı dinamik oluşturmaya tercih edecektir.

Streaming

Diagram showing parallelization of route segments during streaming, showing data fetching, rendering, and hydration of individual chunks.

Akış, kullanıcı arayüzünü sunucudan aşamalı olarak oluşturmanızı sağlar. İş parçalara bölünür ve hazır hale geldikçe istemciye aktarılır. Bu, kullanıcının tüm içeriğin işlenmesi bitmeden sayfanın bazı bölümlerini hemen görmesini sağlar.

Diagram showing partially rendered page on the client, with loading UI for chunks that are being streamed.

Akış, varsayılan olarak Next.js App Router'da yerleşiktir. Bu, hem ilk sayfa yükleme performansını hem de tüm rotanın oluşturulmasını engelleyecek daha yavaş veri alımlarına bağlı olan kullanıcı arayüzünü iyileştirmeye yardımcı olur. Örneğin, bir ürün sayfasındaki incelemeler.

React Suspense ile loading.js ve UI bileşenlerini kullanarak rota segmentlerinin akışını başlatabilirsiniz. Daha fazla bilgi için UI Yükleme ve Akış bölümüne bakın.