Architektura islands: selektywna hydratacja
Poznają Państwo sposób izolowania interaktywnych komponentów przez islands, dzięki czemu tylko one otrzymują JavaScript, a reszta pozostaje statycznym HTML-em.
Architektura islands: selektywna hydratacja to bezpłatna lekcja React Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.
Koncepcja wysp
Islands Architecture, termin ukuty przez Jasona Millera w 2020 roku, traktuje stronę internetową jako w większości statyczny kod HTML z osadzonymi, odizolowanymi «wyspami» interaktywności. Statyczny ocean kodu HTML jest wysyłany do przeglądarki bez zmian. Tylko interaktywne wyspy pobierają i wykonują JavaScript, dzięki czemu jego rozmiar jest proporcjonalny do rzeczywistej interaktywności.
Jak działają wyspy
Każda wyspa jest niezależnie poddawanym hydratacji komponentem. Serwer renderuje początkowy kod HTML wyspy razem z resztą strony. Gdy JavaScript wyspy zostanie załadowany, React przeprowadza hydratację wyłącznie tego poddrzewa komponentów. Kod HTML otaczający wyspy nigdy nie jest modyfikowany przez JavaScript — pozostaje naprawdę statyczny.
Różnica w rozmiarze pakietu JavaScriptu
Na stronie wpisu blogowego wykorzystującej Islands Architecture pakiet JavaScriptu może mieć rozmiar 5 kB dla pojedynczej wyspy z przyciskiem polubienia. Ta sama strona zbudowana jako SPA w React mogłaby wysyłać ponad 200 kB JavaScriptu w celu przeprowadzenia hydratacji całej strony. Podejście oparte na wyspach sprawia, że rozmiar pakietu jest proporcjonalny do interaktywności, a nie do rozmiaru strony.
Wyspy wieloframeworkowe
Astro, najpopularniejszy framework wykorzystujący Islands Architecture, obsługuje wyspy zbudowane przy użyciu różnych frameworków na tej samej stronie. Można umieścić obok siebie wyspę Reacta, wyspę Vue i wyspę wykorzystującą czysty JavaScript. Każda wyspa jest niezależnie pakowana, więc użytkownicy pobierają tylko kod frameworków używanych przez widoczne wyspy.
client:load — natychmiastowa hydratacja
Dyrektywa client:load przeprowadza hydratację wyspy natychmiast po załadowaniu strony. Należy jej używać w przypadku wysp, które są od razu widoczne i interaktywne, takich jak menu nawigacyjne lub sekcja główna z polem wyszukiwania. Jest to strategia hydratacji o najwyższym priorytecie.
client:idle — odroczona hydratacja
Dyrektywa client:idle czeka, aż główny wątek przeglądarki będzie bezczynny (po załadowaniu najważniejszej treści), zanim przeprowadzi hydratację wyspy. Jest idealna w przypadku widżetów znajdujących się poniżej widocznego obszaru lub drugorzędnych interakcji, które nie są potrzebne od razu, takich jak pasek udostępniania w mediach społecznościowych.
client:visible — leniwa hydratacja
Dyrektywa client:visible wykorzystuje Intersection Observer do przeprowadzenia hydratacji wyspy dopiero wtedy, gdy zostanie ona przewinięta do obszaru widocznego w oknie. Jest to idealne rozwiązanie dla wysp znajdujących się głęboko na stronie — sekcji komentarzy lub karuzeli powiązanych produktów — do których większość użytkowników może nigdy nie dotrzeć. JavaScript nie jest nawet ładowany, dopóki nie okaże się potrzebny.
client:only — pominięcie SSR
Dyrektywa client:only całkowicie pomija renderowanie po stronie serwera i renderuje wyspę wyłącznie w przeglądarce. Jest to konieczne w przypadku komponentów korzystających z interfejsów API dostępnych tylko w przeglądarce (window, document) lub zależnych od stanu po stronie klienta w momencie montowania. Ceną jest brak kodu HTML wyrenderowanego przez serwer dla tej wyspy.
Rozwiązanie problemu hydratacji
Islands Architecture rozwiązuje problem pełnej hydratacji, zapewniając ładowanie i wykonywanie JavaScriptu wyłącznie dla rzeczywiście interaktywnych komponentów. Wpis na blogu z przyciskiem polubienia poddaje hydratacji tylko wyspę tego przycisku — tekst artykułu liczący 1200 słów, nagłówek i stopka nie powodują żadnego wykonywania JavaScriptu po stronie klienta.
Izolacja stanu między wyspami
Każda wyspa ma własny, odizolowany stan. Wyspy nie mogą bezpośrednio współdzielić stanu Reacta, ponieważ są osobnymi drzewami Reacta. Jest to zamierzone działanie: jeśli dwa komponenty muszą współdzielić stan, należy połączyć je w jedną wyspę. Komunikacja między wyspami wykorzystuje parametry URL, zdarzenia DOM lub lekkie biblioteki zarządzania stanem.
Wyniki w rzeczywistych zastosowaniach
Strony migrowane z React SPA do Islands Architecture (takie jak strona dokumentacji Astro) odnotowują znaczące usprawnienia: rozmiar pakietów JavaScriptu zmniejsza się o 70–90%, TTI poprawia się o 2–4 sekundy na urządzeniach mobilnych, a wyniki wydajności w Lighthouse rosną z 60 do ponad 90 punktów. Korzyści są najbardziej widoczne na stronach zawierających dużo treści.
Strategie hydratacji wysp
Za pomocą której dyrektywy hydratacji Astro można przeprowadzić hydratację komponentu dopiero wtedy, gdy przewinie się on do obszaru widocznego w oknie?
Podsumowanie lekcji
Architektura wysp pozostawia większość strony jako statyczny HTML i przeprowadza hydratację tylko odizolowanych komponentów interaktywnych. Astro udostępnia dyrektywy hydratacji: client:load (natychmiast), client:idle (po przejściu przeglądarki w stan bezczynności), client:visible (podczas przewijania) oraz client:only (renderowanie wyłącznie po stronie klienta). Każda wyspa jest hydratowana niezależnie, dzięki czemu ilość kodu JavaScript zależy od poziomu interaktywności, a nie od rozmiaru strony.
Często zadawane pytania
Czy lekcja „Architektura islands: selektywna hydratacja” jest bezpłatna?
Tak — pełny tekst „Architektura islands: selektywna hydratacja” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Architektura islands: selektywna hydratacja”?
Poznają Państwo sposób izolowania interaktywnych komponentów przez islands, dzięki czemu tylko one otrzymują JavaScript, a reszta pozostaje statycznym HTML-em. Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć React Academy?
Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Architektura islands: selektywna hydratacja”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?
Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Problem pełnej hydratacji
- Architektura islands: selektywna hydratacja
- Konfiguracja Astro i React Islands
- Pomiar wydajności: Lighthouse i Core Web Vitals