Hydration
- Okunuşu
- haydreyşın
Kısaca
Hydration, tarayıcıdaki JavaScript'in sunucuda üretilmiş HTML'i devralıp olay yöneticilerini ve durumu bağlayarak sayfayı etkileşimli hale getirdiği adımdır.
Hydration nedir?
Bir sayfa SSR ya da SSG ile render edildiğinde tarayıcı hemen gösterebileceği eksiksiz bir HTML alır, ancak bu HTML cansızdır: düğmelerin ve formların henüz bir JavaScript davranışı yoktur. Hydration, framework'ün JavaScript'inin yüklendiği, bileşenlerin bellekteki resmini yeniden kurduğu, bunu mevcut HTML ile eşleştirdiği ve olay dinleyicilerini ile durumu bağladığı adımdır.
Hydration, istemci tarafı render ile aynı şey değildir. CSR sayfayı boş bir kabuktan tarayıcıda oluştururken, hydration zaten var olan HTML'i yeniden kullanır ve yalnızca etkileşim ekler. Örneğin React'te, sunucunun HTML'i atılıp yeniden oluşturulmak yerine korunsun diye createRoot() yerine hydrateRoot() kullanılır.
Seyirci gelmeden önce tümüyle kurulmuş bir sahne düşünün; hydration, oyuncuların sahneye çıktığı ve dekor parçalarının çalışmaya başladığı andır. Hydration bitene kadar sayfa hazır görünüp tıklamaları yok sayabilir; büyük JavaScript paketleri de, özellikle yavaş telefonlarda bu aralığı uzatır. Bu gecikme çoğunlukla Interaction to Next Paint (INP) gibi yanıt verme metriklerinde kendini gösterir.
Yaygın bir sorun hydration uyuşmazlığıdır (hydration mismatch). Tarayıcıdaki ilk render, sunucunun gönderdiğinden farklı bir işaretleme ürettiğinde, örneğin kod render sırasında geçerli zamanı, rastgele değerleri ya da yalnızca tarayıcıya özgü API'leri kullandığında ortaya çıkar. Kısmi hydration (partial hydration), adalar mimarisi (islands architecture) ve React Server Components gibi teknikler, yalnızca sayfanın etkileşimli olması gereken kısımlarını hydrate ederek maliyeti azaltır.
Önemli noktalar
- Hydration, sunucuda üretilmiş veya statik HTML'i etkileşimli hale getirir.
- Framework, olay yöneticilerini ve durumu mevcut HTML'e bağlar.
- Hydration bitene kadar sayfa hazır görünüp yanıt vermeyebilir.
- Hydration uyuşmazlığı, tarayıcı ve sunucu çıktısı farklı olduğunda oluşur.
- Kısmi hydration ve adalar, tarayıcıya daha az JavaScript gönderir.
Örnek
// client.jsx: runs in the browser after the server's HTML has loaded
import { hydrateRoot } from "react-dom/client";
import App from "./App";
// Reuse the existing HTML inside #root and attach event handlers,
// instead of rendering the whole page again from scratch
hydrateRoot(document.getElementById("root"), <App />);Sık sorulan sorular
Hydration hatası nedir?
Hydration hatası ya da uyuşmazlığı, tarayıcıdaki ilk render'ın sunucunun gönderdiğinden farklı bir işaretleme üretmesiyle ortaya çıkar. Yaygın nedenler tarihler, rastgele sayılar ve render sırasında yapılan typeof window gibi kontrollerdir; bu tür kodu hydration'dan sonra çalışan effect'lere ya da olay yöneticilerine taşıyın.
Hydration ile istemci tarafı render arasındaki fark nedir?
İstemci tarafı render, sayfanın HTML'ini neredeyse boş bir belgeden tarayıcıda oluşturur. Hydration ise sunucunun zaten render ettiği HTML'den yola çıkar ve yalnızca JavaScript davranışını bağlar.
Kısmi hydration nedir?
Çoğunlukla adalar mimarisi olarak uygulanan kısmi hydration, bir sayfanın yalnızca arama kutusu ya da görsel karuseli gibi etkileşimli kısımlarını hydrate eder, geri kalanını statik HTML olarak bırakır. Bu, tarayıcının indirip çalıştırması gereken JavaScript miktarını azaltır.
İlgili sayfalar
- SSRWeb Geliştirme, s. 44SSR, sunucunun her istekte bir sayfanın tam HTML'ini oluşturduğu ve böylece kullanıcıların ile arama motorlarının hazır içeriği hemen aldığı tekniktir.
- SSGWeb Geliştirme, s. 43SSG, bir sitenin sayfalarını derleme zamanında düz HTML dosyalarına dönüştüren tekniktir; sunucular ya da CDN'ler bunları ek iş yapmadan anında sunabilir.
- CSRWeb Geliştirme, s. 10CSR, tarayıcının çoğunlukla boş bir HTML sayfası ile JavaScript indirip sayfa içeriğini kullanıcının cihazında oluşturduğu render yaklaşımıdır.
- ReactWeb Geliştirme, s. 37React, veri değişince otomatik güncellenen, yeniden kullanılabilir bileşenlerle kullanıcı arayüzü kurmaya yarayan açık kaynaklı JavaScript kütüphanesidir.
- DOMWeb Geliştirme, s. 14DOM, tarayıcının bir web sayfasını temsil eden ve JavaScript'in okuyup değiştirerek kullanıcının gördüğünü güncelleyebildiği bellek içi nesne ağacıdır.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin