StriveLab
Strony internetowe
Usługi
RealizacjeO mnieBlogPorozmawiajmy
PL
EN

Astro

Ultraszybkie projekty, łączące lekkość ze skalowalnością.

Next.js

Elastyczne i wydajne narzędzia dla biznesu, które dotrzymają kroku Twojemu rozwojowi.

React

Połączenie intuicyjności z wydajnością, które zapewnia bezproblemową skalowalność kodu.

SEO & Performance

Audyt techniczny i optymalizacja pod kątem SEO i GEO.

Automatyzacja AI

Bezpieczne automatyzacje procesów i agenci AI w n8n, Make i Claude.

QA & Automation

Testy automatyczne komponentów i E2E w Cypress.

Konsultacje

Połączenie perspektywy produktu, developera i marketingu w jednym miejscu

StriveLab
Strony internetowe
Usługi
RealizacjeO mnieBlogPorozmawiajmy
PL
EN

Astro

Ultraszybkie projekty, łączące lekkość ze skalowalnością.

Next.js

Elastyczne i wydajne narzędzia dla biznesu, które dotrzymają kroku Twojemu rozwojowi.

React

Połączenie intuicyjności z wydajnością, które zapewnia bezproblemową skalowalność kodu.

SEO & Performance

Audyt techniczny i optymalizacja pod kątem SEO i GEO.

Automatyzacja AI

Bezpieczne automatyzacje procesów i agenci AI w n8n, Make i Claude.

QA & Automation

Testy automatyczne komponentów i E2E w Cypress.

Konsultacje

Połączenie perspektywy produktu, developera i marketingu w jednym miejscu

Astro

Ultraszybkie projekty, łączące lekkość ze skalowalnością.

Next.js

Elastyczne i wydajne narzędzia dla biznesu, które dotrzymają kroku Twojemu rozwojowi.

React

Połączenie intuicyjności z wydajnością, które zapewnia bezproblemową skalowalność kodu.

SEO & Performance

Audyt techniczny i optymalizacja pod kątem SEO i GEO.

Automatyzacja AI

Bezpieczne automatyzacje procesów i agenci AI w n8n, Make i Claude.

QA & Automation

Testy automatyczne komponentów i E2E w Cypress.

Konsultacje

Połączenie perspektywy produktu, developera i marketingu w jednym miejscu

RealizacjeO mnieBlog
Porozmawiajmy
PL
EN

Nowoczesne strony internetowe dla firm, które myślą odważnie.

Przewiń do góry

Nazwa

StriveLab Maciej Sala

NIP

6772218995

REGON

524008527

E-mail

contact@strivelab.pl

Usługi główne
  • Tworzenie stron internetowych
  • Strony internetowe Next.js
  • Strony internetowe Astro
  • Strony internetowe React
Inne usługi
  • Usługi
  • Audyt SEO i Performance
  • Testy automatyczne i QA
  • Konsultacje Produktowe
  • Automatyzacja Procesów AI
  • Aplikacje webowe Next.js
  • Współpraca ciągła
Strony
  • O mnie
  • Usługi
  • Realizacje
  • Blog

© 2026 StriveLab.pl

Polityka prywatności
AstroWydajnośćArchitektura

Architektura wysp w Astro — czym są wyspy i dlaczego zero JS domyślnie zmienia zasady gry

Zero JS domyślnie to fundament Astro. Czym są wyspy, jak działa selektywna hydratacja i kiedy naprawdę ma to wpływ na wydajność?

OpublikujLinkedInFacebookWyślij
Autor
Maciej Sala
Opublikowano
24 kwietnia 2026 00:00
Czytanie
8 min czytania
Aktualizacja
25 maja 2026 12:48

Zero JavaScript domyślnie brzmi jak jakaś reklama, ale dane jasno pokazują, że to architektoniczna decyzja, która daje do myślenia: powyżej 95, bliski zera, Google dostaje czysty HTML od razu. Klasyczne aplikacje wysyłają do przeglądarki cały framework, nawet jeśli większość strony to statyczna treść. W tym artykule rozkładam mechanizm wysp na części i pokazuję, kiedy daje realne korzyści, a kiedy nie.

w skrócie

  • Astro renderuje stronę jako HTML i tylko te komponenty, które faktycznie muszą być interaktywne.
  • Zero JS domyślnie oznacza brak frameworkowego runtime na stronach czysto treściowych.
  • Dyrektywy są kontraktem wydajnościowym, ponieważ jawnie wybierasz moment hydratacji.
  • wygrywa na stronach zorientowanych na treść, ale nie zastępuje pełnej aplikacji .

Architektura wysp to konkretny wzorzec, który zmienia sposób ładowania i uruchamiania strony w przeglądarce. Astro zbudowało wokół niego swoją strukturalną przewagę — i to właśnie dlatego strona Astro może domyślnie ładować się błyskawicznie, bez dodatkowych optymalizacji.

Skąd się wziął termin „Islands Architecture"

Pojęcie zostało ukute w 2019 roku przez Katie Sylor-Miller, frontend architekta Etsy, a później rozwinięte przez Jasona Millera (twórcę Preacta) w jego poście z 2020 roku. Idea jest pozornie prosta: renderuj stronę jako HTML na serwerze, a w obszarach, które faktycznie potrzebują interaktywności, umieść niezależne, samodzielne komponenty, które osobno.

W tradycyjnym podejściu (React, Vue, Angular, Svelte bez SvelteKit) cała aplikacja jest jedną dużą wyspą interaktywności. Przeglądarka dostaje pusty HTML albo HTML wyrenderowany na serwerze, potem pobiera paczkę JavaScriptu, uruchamia framework, odtwarza drzewo komponentów i dopiero wtedy strona zaczyna reagować na kliknięcia. Użytkownik odczuwa to jako sytuację: „strona już się pokazała, ale jeszcze nie działa".

Islands Architecture odwraca ten model — strona jest domyślnie statycznym HTML-em, a interaktywność to wyjątek, który aktywnie deklarujesz.

Jak to działa w Astro

Weźmy typową stronę firmową mającą nagłówek z logo, hero, sekcję usług, formularz kontaktowy i stopkę. W tradycyjnym React/Next wszystkie te elementy są częścią aplikacji React, więc całe drzewo musi zostać zhydratowane, nawet jeśli interaktywny jest tylko formularz.

W Astro piszesz to tak:

Code
---
// src/pages/index.astro
import Header from '../components/Header.astro';
import Hero from '../components/Hero.astro';
import Services from '../components/Services.astro';
import ContactForm from '../components/ContactForm.tsx';
import Footer from '../components/Footer.astro';
---
 
<Header />
<Hero />
<Services />
<ContactForm client:visible />
<Footer />

Header, Hero, Services i Footer to komponenty .astro — renderują się na serwerze do czystego HTML-u i nie wysyłają do przeglądarki żadnego JavaScriptu związanego z tymi sekcjami. ContactForm to komponent React z dyrektywą client:visible; jego kod zostanie pobrany i uruchomiony dopiero wtedy, gdy użytkownik przewinie stronę do formularza.

W efekcie przeglądarka dostaje HTML, renderuje go natychmiast, a użytkownik widzi treść w ułamku sekundy. JavaScript ładuje się w tle, selektywnie, tylko tam, gdzie jest potrzebny.

Zero JS domyślnie — co to naprawdę znaczy

W Next.js nawet strona, która wyświetla tylko statyczny tekst, ładuje runtime Reacta — reconciler, router oraz mechanizm hydratacji. W praktyce to 80–150 KB gzipped, zanim jakikolwiek Twój kod się wykonał. Dla porównania, w Astro strona bez interaktywnych komponentów to dosłownie 0 KB JavaScriptu.

Code
<!-- To jest cały HTML, który dostaje przeglądarka dla strony bez islands -->
<!doctype html>
<html lang="pl">
  <head>
    <meta charset="UTF-8" />
    <title>Strona główna</title>
    <link rel="stylesheet" href="/_astro/about.abc123.css" />
  </head>
  <body>
    <header>...</header>
    <main>...</main>
    <footer>...</footer>
  </body>
</html>

Żadnych skryptów , startu frameworka ani hydratacji komponentów — przeglądarka pobiera HTML, parsuje CSS i pokazuje stronę. W wypadku Lighthouse często oznacza to wynik Performance 95-100 bez ciężkiej optymalizacji. Dla : bardzo niski koszt JavaScriptu, dobry punkt wyjścia pod i oraz mniej ryzyka po stronie . Dla : Google widzi treść od razu, bez czekania na renderowanie po stronie klienta.

Dyrektywy hydratacji — kontrakt na wydajność

Kiedy już jakiś komponent musi być interaktywny, Astro daje Ci precyzyjną kontrolę nad tym, kiedy dostanie swój JavaScript. Pięć dyrektyw, pięć różnych strategii:

  • client:load — hydratacja natychmiast po załadowaniu strony. Dla rzeczy krytycznych, ponad zagięciem.
  • client:idle — hydratacja, kiedy przeglądarka jest bezczynna (). Dla elementów ważnych, ale nie pilnych.
  • client:visible — hydratacja, kiedy komponent pojawia się w widocznym obszarze ekranu (). Dla elementów poniżej pierwszego ekranu.
  • client:media="{query}" — hydratacja tylko wtedy, gdy zapytanie media query pasuje. Dla UI przeznaczonego wyłącznie na mobile albo desktop.
  • client:only="{framework}" — komponent renderuje się tylko po stronie klienta, pomijając . Dla rzeczy zależnych od przeglądarki (np. window, localStorage).

Szczegółowo rozbieram każdą z nich w artykule o client directives w Astro.

Komponenty z różnych frameworków na jednej stronie

Architektura wysp ma jeszcze jedną konsekwencję, która w praktyce okazuje się bardziej użyteczna, niż się wydaje na pierwszy rzut oka — każda wyspa jest niezależna, więc może być napisana w innym frameworku.

Code
---
import ReactCounter from '../components/ReactCounter.tsx';
import VueChart from '../components/VueChart.vue';
import SvelteForm from '../components/SvelteForm.svelte';
---
 
<ReactCounter client:load />
<VueChart client:visible />
<SvelteForm client:idle />

W tradycyjnej SPA takie połączenie byłoby trudne do utrzymania, bo framework jest zwykle jeden. W Astro każda wyspa ładuje tylko runtime swojego frameworka i żyje we własnej paczce kodu.

Kiedy to się przydaje? Gdy masz komponent z zewnętrznej biblioteki napisany w Svelte i nie chcesz przepisywać go na React albo gdy migrujesz projekt z Vue na React etapami. Możesz też używać gotowego widgetu z biblioteki headless UI w innej technologii albo gdy budujesz wspólny system komponentów dla kilku projektów opartych na różnych stosach technologicznych.

Server Islands — dynamika w statycznej stronie

Kolejna ewolucja wzorca, dodana w Astro 5 i ustabilizowana w 6, to Server Islands. Działają odwrotnie niż klienckie wyspy: komponent nie renderuje się razem z główną stroną, tylko jego rendering jest odłożony i wykonywany po wysłaniu pierwszej odpowiedzi.

Code
---
// src/pages/product.astro
import ProductDetails from '../components/ProductDetails.astro';
import LiveInventory from '../components/LiveInventory.astro';
---
 
<ProductDetails />
 
<!-- Server Island - renderuje się osobno, nie blokuje głównej odpowiedzi -->
<LiveInventory server:defer>
  <div slot="fallback">Ładowanie stanu magazynu...</div>
</LiveInventory>

Użytkownik od razu dostaje statyczną stronę produktu z cache, a dynamiczny fragment (np. stan magazynu, rekomendacje albo koszyk) dociera osobnym żądaniem i wypełnia miejsce zastępcze, gdy jest gotowy. To łączy wydajność z dynamiką SSR bez hydratowania komponentu frameworka po stronie klienta. Astro nadal wstawia mały skrypt techniczny, który pobiera zawartość wyspy serwerowej.

Szerzej opisuję ten mechanizm w artykule o Server Islands w Astro.

Kiedy Islands Architecture realnie wygrywa

Astro nie jest magicznym rozwiązaniem na wszystko. Architektura wysp może nam bardzo dużo dać, ale gdy spełnione są konkretne warunki:

  1. Strona jest głównie treścią. Blog, dokumentacja, strona firmowa, portfolio, landing page, sklep z prostym koszykiem. Tam, gdzie większość powierzchni to tekst, obrazy i linki, a interaktywność pojawia się tylko w kilku miejscach.
  2. Core Web Vitals są krytyczne. Jeśli walczysz o pozycje w Google, konwersję z mobile albo wydajność na słabszym sprzęcie, eliminacja runtime'u frameworka daje bardzo dużo.
  3. Masz kontrolę nad tym, co interaktywne. Kiedy sam decydujesz, co potrzebuje JS, a co nie, możesz wyciągnąć maksimum z architektury wysp.

Kiedy Islands Architecture nie pomaga

I druga strona medalu:

  1. Aplikacja jest interaktywna w 80%+, czyli dashboard, panel admina, edytor, CRM, kalkulator finansowy z wieloma polami — tam, gdzie cała strona to interakcja, architektura wysp nie daje wiele. Wyspa to cała strona.
  2. Stan globalny jest konieczny. Jeśli wiele komponentów musi dzielić stan, np. koszyk, użytkownika albo preferencje UI, wyspy komplikują sprawę. Każda ma swój kontekst, a synchronizacja wymaga zewnętrznego magazynu stanu.
  3. Potrzebujesz frameworka fullstackowego. Routes, Server Actions, middleware, auth, websockety — w tym zakresie Next.js daje dużo więcej.

Porównanie obu podejść szerzej opisałem w artykule Astro.js vs Next.js — które narzędzie wybrać w 2026 roku?.

Praktyczne wskazówki projektowe

Jeśli zaczynasz projekt w Astro, rekomenduję następujący sposób myślenia:

Zaczynaj od zera JS. Każdy komponent traktuj domyślnie jako .astro — po React/Vue/Svelte z dyrektywą hydratacji sięgaj dopiero wtedy, gdy naprawdę potrzebujesz stanu, zdarzeń lub efektów.

Wybieraj najmniej agresywną dyrektywę. client:visible powinien być domyślnym wyborem, a potem client:idle dla rzeczy ważnych, ale poniżej viewportu. client:load zostaw dla rzeczy, które muszą działać natychmiast (navbar z dropdownem, hero z CTA).

Nie zawijaj całego layoutu w React. To typowy błąd przy migracji z Next.js — programista przyzwyczajony do _app.tsx opakowuje wszystko w jeden komponent React. W Astro layout powinien być .astro, a Reacta używasz tylko w miejscach, które naprawdę potrzebują interakcji.

Unikaj mapowania dużych list do klienckich wysp. Jeśli masz 100 elementów i każdy jest osobną wyspą React, szybko wracasz do ciężkiego JavaScriptu. Lepiej zrobić jeden kontener-wyspę, który obsłuży listę po stronie klienta.

Pilnuj, żeby wyspy były niezależne. Każda wyspa ma własny kontekst i hydratuje się osobno. Jeśli próbujesz dzielić stan między dwiema wyspami przez React Context, to znak, że model nie jest dobrze dobrany. Rozwiązaniem jest albo zweryfikowanie, czy faktycznie potrzebujesz dwóch wysp, albo użycie Zustand lub .

Budżet JavaScriptu dla wysp

Największy błąd w Astro to traktowanie client:* jak taki bajer, który można dopisać w różne miejsca bez myślenia o wydajności, ponieważ każda wyspa wnosi runtime frameworka, kod komponentu i potencjalnie zależności.

Typ sekcjiDomyślna decyzjaDlaczego
Hero z tekstem i obrazem.astro, bez hydratacjiTreść i układ nie potrzebują JS
Formularz kontaktowyReact/Svelte z client:visible albo server actionInterakcja jest potrzebna dopiero przy sekcji formularza
Menu mobileMała wyspa z client:loadNawigacja musi działać od razu
Kalkulator cenyclient:idle lub client:visibleWażny, ale zwykle nie jest pierwszą interakcją
Opinie, logo, FAQStatyczny HTMLInteraktywność zwykle nie wnosi wartości
Wskazówka

W audycie Astro patrzę nie na liczbę komponentów, tylko na liczbę zhydratowanych frameworkowych wysp i ich wspólne zależności.

Islands Architecture a SEO

Z perspektywy SEO architektura wysp ma jedną fundamentalną zaletę: Google i inne roboty indeksujące dostają gotowy HTML bez zależności od JavaScriptu. Nie czekają na renderowanie po stronie klienta, nie przepalają dodatkowo crawl budgetu i nie muszą wyciągać metadanych z dynamicznego kodu. Wszystko, co powinno być zindeksowane, jest w HTML-u już w odpowiedzi serwera.

Dla rankingów oznacza to lepszy punkt startowy pod Core Web Vitals, czystsze dane uporządkowane i mniejsze ryzyko, że ważna treść nie zostanie zindeksowana. Dla / roboty dostają prostszy dokument HTML, z mniejszą liczbą skryptów i mniej złożoną hydratacją, co może pomagać w maszynowym rozumieniu treści. Nie traktowałbym tego jednak jako gwarancji cytowań.

Głębiej temat SEO w Astro rozbieram w osobnym artykule.

Werdykt Labu

Architektura wysp to świadomy kompromis — rezygnujesz z wygody pełnego Reacta na każdym poziomie strony, by zyskać precyzyjną kontrolę nad tym, co trafia do przeglądarki. Użycie dyrektywy client:* nie powinno być domyślnym ustawieniem frameworka, ale jawną decyzją wydajnościową.

Kluczem jest rozpoznanie, w jakich warunkach dana technologia będzie odpowiednia, a w jakich odpada. Jeśli strona dostarcza głównie informację, wyspy dają wydajność, której nie osiągniesz porównywalnym nakładem pracy w klasycznym React/Next. Jeśli produkt to przede wszystkim interakcja i stan, koszt zarządzania wieloma izolowanymi wyspami przewyższa zyski — Next.js z pełnym Reactem pozostaje lepszym wyborem.

Audyt techniczny i optymalizacja pod kątem SEO i GEO.
SEO & Performance
  • Skąd się wziął termin „Islands Architecture"1 min
  • Jak to działa w Astro1 min
  • Zero JS domyślnie — co to naprawdę znaczy1 min
  • Dyrektywy hydratacji — kontrakt na wydajność1 min
  • Komponenty z różnych frameworków na jednej stronie1 min
  • Server Islands — dynamika w statycznej stronie1 min
  • Kiedy Islands Architecture realnie wygrywa1 min
  • Kiedy Islands Architecture nie pomaga1 min
  • Praktyczne wskazówki projektowe1 min
  • Budżet JavaScriptu dla wysp1 min
  • Islands Architecture a SEO1 min
  • Werdykt Labu1 min

Często zadawane pytania

Źródła i data weryfikacjiZweryfikowano: 25 maja 2026

Informacje o koncepcji wysp, dyrektywach hydratacji i obsłudze frameworków UI w Astro zweryfikowano na podstawie oficjalnej dokumentacji oraz materiałów źródłowych:

Astro — Islands Architecture, Astro — Client directives, Astro — UI Frameworks, Jason Miller — Islands Architecture (jasonformat), patterns.dev — Islands Architecture.

Seria

Astro w praktyce 2026
Część 3 / 10
  1. 1Pierwszy projekt w Astro — od npm create astro do wdrożenia w 15 minut
  2. 2Astro 6 — przewodnik po nowościach: Cloudflare Workers, Live Content Collections, Fonts API i CSP
  3. Architektura wysp w Astro — czym są wyspy i dlaczego zero JS domyślnie zmienia zasady gry
  4. 4Client directives w Astro — client:load, client:idle, client:visible, client:media, client:only w praktyce
  5. 5Astro Content Collections — typowany blog z walidacją Zod od podstaw
  6. 6Server Islands w Astro — dynamiczne fragmenty na statycznej stronie
  7. 7Astro View Transitions — płynne przejścia między stronami bez budowania SPA
  8. 8SEO w Astro — Core Web Vitals, dane uporządkowane i techniczny fundament rankingu w 2026
  9. 9Migracja bloga z WordPress na Astro — eksport treści, przekierowania 301 i zachowanie pozycji w Google
  10. 10Lighthouse 100/100 w Astro — case study optymalizacji strony usługowej
Maciej Sala

O autorze

Maciej Sala

Maciej Sala — Product Manager i Frontend Developer z bogatym doświadczeniem w marketingu internetowym oraz SEO. Na co dzień pracuje z Reactem, Next.js i TypeScriptem, a ostatnio także z Astro i narzędziami do automatyzacji procesów AI. Sprawnie łączy perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat był związany z branżą gier wideo jako project manager i game designer. Absolwent historii na Uniwersytecie Jagiellońskim oraz studiów podyplomowych z marketingu internetowego na AGH w Krakowie. Po godzinach trenuje na siłowni, maluje figurki i rozwija własne projekty side-projecty.

Moje artykułyWięcej o mnie

Pomagam przekładać takie tematy na konkretne wdrożenia w frontendzie, SEO, analityce i procesie produktowym.

Skontaktuj się ze mną

Biblioteka wiedzy

Czytaj dalej

Zobacz więcej wpisów
Astro.js vs Next.js w 2026 — kompleksowe porównanie frameworków
Astro.js vs Next.js w 2026 — kompleksowe porównanie frameworków

Astro 6 vs Next.js 16 — zupełnie różne założenia. Które wybrać do strony usługowej, bloga, SaaS i e-commerce? Decydujące kryteria.

Maciej Sala

Maciej Sala

Founder Strivelab

15 kwietnia 2026
Wieloframeworkowa architektura wysp w Astro: React, Vue i Svelte w jednym projekcie
Wieloframeworkowa architektura wysp w Astro: React, Vue i Svelte w jednym projekcie

Trzy frameworki, jeden projekt — Astro naprawdę na to pozwala. Koszty runtime, dyrektywy i ograniczenia ważne w projektach enterprise.

Maciej Sala

Maciej Sala

Founder Strivelab

18 maja 2026
Pierwszy projekt w Astro — od npm create astro do wdrożenia w 15 minut
Pierwszy projekt w Astro — od npm create astro do wdrożenia w 15 minut

Od zera do wdrożonej strony w 15 minut — Astro w pigułce dla tych, którzy nie chcą tracić czasu na konfigurację.

Maciej Sala

Maciej Sala

Founder Strivelab

29 maja 2026

Poprzedni wpis

Migracja bloga z WordPress na Astro — eksport treści, przekierowania 301 i zachowanie pozycji w Google
Migracja bloga z WordPress na Astro — eksport treści, przekierowania 301 i zachowanie pozycji w Google

Migracja bloga z WordPress na Astro bez utraty pozycji w Google — jak wyeksportować treść, zmapować URL-e i nie zepsuć 301-ek?

Maciej Sala

Maciej Sala

Founder Strivelab

24 kwietnia 2026

Następny wpis

Astro View Transitions — płynne przejścia między stronami bez budowania SPA
Astro View Transitions — płynne przejścia między stronami bez budowania SPA

Płynne przejścia jak w SPA, ale bez budowania SPA — View Transitions API w Astro i kiedy faktycznie warto go używać w produkcji.

Maciej Sala

Maciej Sala

Founder Strivelab

24 kwietnia 2026