
Astro Islands Architecture entmystifiziert: So funktioniert partielle Hydratation

Astro Islands Architecture entmystifiziert: So funktioniert partielle Hydratation
Erinnert sich noch jemand an die Zeit, als Webseiten einfach... luden? Man klickte auf einen Link und bam, der Text war da. Keine Lade-Spinner. Keine Hydration-Errors in der Konsole.
Heute schieben wir für einen simplen Blogbeitrag oft Megabytes an JavaScript durch die Leitung. Klar, Tools wie React oder Vue sind genial. Wir bauen damit verrückte Interfaces. Aber der Preis? Eine Total Blocking Time (TBT), die einem die Tränen in die Augen treibt. Und Google straft das gnadenlos ab.
Man sitzt da, starrt auf den Screen. Die Seite sieht eigentlich fertig aus. Man klickt auf den Menü-Button – nichts passiert. Der Browser ist völlig ausgelastet damit, im Hintergrund das riesige JavaScript-Bundle auszupacken, zu parsen und den DOM zu übernehmen. Dieses zähe "Einfrieren" nennt man Hydratation. Es nervt. Gewaltig.
Genau an diesem Schmerzpunkt setzt die Astro Islands Architecture an. Und nein, das ist kein weiteres Hype-Wort für den Lebenslauf, sondern ein brutaler Cut mit der Art und Weise, wie wir in den letzten Jahren SPAs (Single Page Applications) gebaut haben. Astro wirft den ganzen Overhead über Bord und geht zurück zu den Basics: Pures HTML.
Stell dir den Browser deines Nutzers mal nicht als eine fette JavaScript-App vor. Stell ihn dir als einen ruhigen Ozean vor. Dieser Ozean ist dein statisches HTML. Er ist leicht. Er ist sofort da. Er kostet die Smartphone-CPU absolut gar nichts.
Und in diesem HTML-Ozean schwimmen kleine, komplett isolierte Inseln.
Ein React-Warenkorb hier. Ein Svelte-Suchfeld dort. Vielleicht ein Vue-Toggle für den Dark Mode. Nur exakt diese Inseln bekommen JavaScript. Der ganze verdammte Rest der Seite? Bleibt tot. Statisch. Das ist die Kernidee der Astro Islands Architecture.
Du schreibst deinen Code ganz normal in React. Aber wenn Astro die Seite auf dem Server baut, reißt es das JavaScript standardmäßig komplett raus. Zero JavaScript by Default. Erst wenn du explizit sagst: "Hey, dieser Button hier muss klickbar sein", wird genau dort – und nur dort – etwas Code geladen.
Das ändert einfach alles. Aber wie steuert man das in der Praxis, ohne im Chaos zu versinken?

Client Directives: Die Kommandozentrale der Hydratation
Also gut, wir haben das JavaScript beim Build-Prozess also rigoros von der Seite geworfen. Das HTML ist flach wie eine Flunder und rasend schnell beim Nutzer. Aber ein toter Button im Warenkorb bringt uns leider keine Umsätze. Wir müssen diese isolierten Fragmente gezielt aufwecken. Und genau hier entfaltet die Astro Islands Architecture ihre eigentliche Superkraft: Du bekommst als Entwickler die absolute Kontrolle darüber zurück, wann der Browser schwitzen muss.
Früher in der reinen React-Welt hieß es oft: Friss oder stirb. Das ganze 2-Megabyte-Bundle wurde beim initialen Laden durch die Leitung gequetscht, koste es was es wolle. Ob der User das fette, interaktive Kommentar-Widget ganz unten im Footer jemals zu Gesicht bekommt? Völlig egal. Runterladen. Parsen. Ausführen. Das ist Ressourcenverschwendung in Reinkultur und der Tod für jedes mobile Endgerät.
Astro gibt uns stattdessen winzige, unglaublich mächtige Schalter an die Hand. Die sogenannten Client Directives.
Stell dir vor, du baust eine E-Commerce-Seite. Du hast da diesen extrem wichtigen "Jetzt Kaufen"-Button. Der muss ab der ersten Millisekunde funktionieren. Keine Kompromisse. Du importierst deine React-Komponente und schreibst einfach <BuyButton client:load />. Bam. Astro weiß sofort Bescheid. Das JavaScript für exakt diesen einen verdammten Button wird parallel zum initialen HTML geladen und sofort ausgeführt. Höchste Priorität. VIP-Behandlung.
Aber was ist mit dem erwähnten Kommentarbereich ganz unten im Blogpost? Den sieht der User in den ersten zehn Sekunden sowieso nicht. Warum also den Main-Thread des Browsers blockieren? Hier kommt mein heimlicher Favorit ins Spiel: <CommentSection client:visible />. Das ist pure Magie. Astro baut im Hintergrund vollautomatisch einen Intersection Observer auf das umschließende HTML-Element. Das eigentliche React-Skript für die Kommentare rührt sich nicht vom Fleck. Es wird nicht einmal angefordert. Erst wenn der User wirklich runterscrollt und der Bereich in Sichtweite kommt – zack – wird das JS über das Netzwerk geladen und hydratisiert die Insel. Die anfängliche Ladezeit deiner Seite sinkt ins Bodenlose.
Und dann haben wir noch Dinge wie <NewsletterPopup client:idle />. Das ist quasi der höfliche Butler unter den Direktiven. Er wartet ganz brav im Hintergrund ab, bis der Browser wirklich absolut nichts Wichtiges mehr zu tun hat. Die Seite steht, die Schriften sind geladen, der Main-Thread gähnt. Dann, und wirklich nur dann, lädt Astro das JS für das Popup. Deine Metriken (vor allem die Total Blocking Time) bleiben perfekt grün, weil das Rendering elegant in die Leerlaufzeiten geschoben wird.
Diese granulare, fast schon chirurgische Steuerung ist der Grund, warum moderne Content-Seiten mit dieser Technik so extrem gut ranken. Du baust keine monolithische App mehr. Du orchestrierst.
Aber Moment. Wenn diese Inseln jetzt alle völlig isoliert voneinander hochfahren... wie zur Hölle kommunizieren die eigentlich miteinander? Ein React-Context funktioniert hier ja nicht mehr.

State Management: Wie isolierte Inseln kommunizieren
Okay, wir haben also diese schicken, komplett voneinander getrennten Inseln. Mega gut für die Performance. Aber jetzt kommt die harte Realität der Projektarbeit um die Ecke.
Stell dir einen simplen E-Commerce-Shop vor. Du hast unten auf der Produktdetailseite deinen "In den Warenkorb" Button. Den hast du in React geschrieben, weil dein Team React halt blind beherrscht. Oben im Header, so richtig schön weit weg im DOM-Baum, sitzt der kleine Warenkorb-Counter. Der ist in Vue geschrieben – vielleicht ein Überbleibsel aus einer alten Codebase, die ihr gerade migriert.
In einer normalen SPA würdest du jetzt einfach einen fetten Redux-Provider oder einen React Context um die komplette Applikation wickeln. Problem gelöst. In Astro? Vergiss es komplett.
Die React-Insel und die Vue-Insel sind in der Astro Islands Architecture völlig isolierte Silos. Die wissen rein gar nichts voneinander. Ein React Context überschreitet die Grenzen seiner eigenen Insel nicht. Wenn der User den Button klickt, passiert oben im Header absolut nichts. Der Counter bleibt stur auf Null. Da sitzt man dann erstmal vorm Monitor und überlegt ernsthaft, ob das Ganze nicht doch ein riesiger Denkfehler war.
Spoiler: War es nicht. Die Community-Lösung für genau diesen Schmerzpunkt heißt Nanostores.
Nanostores ist ein State-Manager, der unfassbar klein ist. Wir reden hier von lächerlichen knapp 300 Bytes. Der eigentliche Clou daran? Es zieht den Zustand (State) komplett aus dem Komponentenbaum heraus. Weg von React, weg von Vue. Der State lebt auf einer völlig neutralen Ebene, quasi frei schwebend im globalen JavaScript-Scope des Browsers.
Du legst in deinem Projekt einfach eine simple TypeScript-Datei an. Nennen wir sie mal cartStore.ts. Darin definierst du deinen State. Ohne riesigen Boilerplate-Code.
Der React-Button importiert diese Datei. Wenn der User klickt, pusht der Button den neuen Wert in den Store. Der Store merkt das und schickt eine winzige, unsichtbare Benachrichtigung raus. Die Vue-Komponente oben im Header, die auf diesen Store "lauscht", fängt das Signal auf und rendert sofort die neue Zahl. Zack. Die Inseln kommunizieren miteinander, ohne sich jemals direkt berühren zu müssen.
Und der Performance-Bonus? Wenn du auf einer simplen Kontaktseite weder den Button noch den Header renderst, schmeißt der Bundler den Code für den Store eiskalt aus dem finalen JavaScript raus. Radikales Tree-Shaking.
Gut, State-Sync funktioniert also. Aber was tun wir, wenn wir Daten haben, die extrem dynamisch sind? User-Avatare, Live-Lagerbestände oder personalisierte Preise? Statisches HTML ist da ja eigentlich nach einer Sekunde sofort veraltet.

Server Islands: Das Ende des Rendering-Dilemmas
Okay, State-Sync läuft. Die Astro Islands Architecture schnurrt wie ein Kätzchen. Aber machen wir uns nichts vor: Das echte Web besteht nicht nur aus statischen Texten und ein paar isolierten Buttons. Was ist, wenn der Product Owner plötzlich um die Ecke kommt und sagt: "Wir brauchen Live-Lagerbestände auf der Produktdetailseite"? Oder einen personalisierten Header, der den Avatar und den Kontostand des eingeloggten Users anzeigt?
Da stehst du dann. Statisches HTML (SSG) ist geil, weil es in drei Millisekunden direkt vom CDN knallt. Aber es ist eben... statisch. Fünf Minuten nach dem Build ist die Zahl der Sneaker auf Lager oft schon wieder gnadenlos veraltet.
Bisher hatten wir da immer zwei ziemlich fiese Optionen. Entweder wir rendern die gesamte verdammte Seite bei jedem Request neu auf dem Server (klassisches SSR). Bam, Time to First Byte (TTFB) komplett im Eimer, weil wir auf die langsamste Datenbankabfrage warten müssen, bevor der Browser auch nur ein Pixel malen darf.
Oder wir laden die Seite statisch und ziehen die frischen Daten mühsam per fetch im Client nach. Das Resultat? Lade-Spinner. Überall. Und ein Layout, das wild herumspringt (Layout Shift), wenn die Daten endlich eintrudeln. Beides ist Mist.
Hier hat Astro kürzlich einen echten Gamechanger aus dem Hut gezaubert: Server Islands.
Das Konzept ist so simpel, dass man sich fragt, warum wir das nicht schon seit Jahren exakt so machen. Du hast deine ganz normale Astro-Komponente für den User-Avatar. Aber beim Aufruf im Code hängst du einfach das magische Attribut server:defer dran.
Das sieht im Code ungefähr so aus: <UserAvatar server:defer><Spinner slot="fallback" /></UserAvatar>
Was passiert da unter der Haube? Das CDN liefert die statische Hülle deiner Website sofort aus. Der Browser rendert augenblicklich das komplette Layout, den Text, die Bilder. Du kannst sofort lesen. An der Stelle des Avatars wird erstmal nur das gerendert, was du im Fallback-Slot definiert hast (z.B. ein grauer Platzhalter).
Und jetzt kommt die Magie: Völlig automatisch schickt Astro im Hintergrund einen winzigen, hochoptimierten Request an deinen Server. Der Server berechnet ausschließlich das Stückchen HTML für diesen spezifischen Avatar und injiziert es nahtlos in die bereits geladene Seite.
Du musst keinen einzigen useEffect-Block schreiben. Du musst keinen Data-Fetcher konfigurieren. Du entkoppelst einfach den statischen, pfeilschnellen Rahmen von deinen dynamischen, langsamen Flaschenhälsen.
Aber wie kriegt man eigentlich hunderte Blogposts oder Produkte sauber in dieses System gepumpt, ohne den Verstand zu verlieren? Markdown-Dateien sind ja schön und gut, aber wehe, ein Redakteur vergisst mal ein Komma im Frontmatter...

Content Collections: Das typensichere Fundament für deine Inhalte
Markdown. Wir alle lieben es, oder? Du schreibst einfach deinen Text runter, knallst oben ein paar Metadaten ins Frontmatter – Titel, Datum, Autor – und fertig ist der Blogpost.
Aber machen wir uns ehrlich: In echten, skalierenden Projekten ist nacktes Markdown ein absoluter Albtraum.
Stell dir vor, du baust ein Magazin für ein ganzes Team. Fünf Leute schreiben Artikel. Einer vergisst das Datum im Frontmatter. Der nächste tippt bei der Kategorie "JavaScript" in der Hektik versehentlich "Javscript". Was passiert beim Build-Prozess auf dem Server? Richtig. Alles fliegt dir mit einer völlig kryptischen Fehlermeldung um die Ohren. Dann darfst du erstmal eine halbe Stunde den Stacktrace durchwühlen, nur um diesen einen miesen Tippfehler in Datei Nummer 47 zu finden. In Next.js haben wir uns dafür früher abartige Konstrukte mit gray-matter und endlosen if-else-Ketten gebaut. Das war Pain pur.
Astro hat sich das angeschaut und gesagt: Schluss mit dem Zirkus. Um die blitzschnelle Auslieferung der Astro Islands Architecture nicht durch fehlerhafte Inhalte zu gefährden, brachte das Team einen echten Gamechanger: Content Collections.
Das ist für mich persönlich das Killer-Feature, weshalb ich inhaltsgetriebene Seiten nur noch so baue. Es zwingt TypeScript-Power direkt in deine simplen Textdateien. Du definierst in einer zentralen Konfigurationsdatei ein striktes Schema für deine Inhalte. Astro nutzt dafür unter der Haube die beliebte Library Zod.
Du definierst einmal klipp und klar: "Jeder Blogpost MUSS einen String als Titel haben. Er DARF optional ein Cover-Bild haben. Aber das Datum? Das muss zwingend ein echtes Date-Format sein."
Wenn jetzt dein Kollege einen neuen Post ins Git pusht und das Datum vergisst? Dann knallt es nicht erst nachts um drei in der Produktion. Nein. Dein verdammter VS Code Editor unterstreicht die Markdown-Datei sofort dick rot. Der Astro-Compiler weigert sich schlichtweg, den Build überhaupt zu starten, und spuckt dir direkt ins Terminal: "Hey Chef, in article-xyz.md fehlt das Feld 'date'".
Das ist eine echte Offenbarung für die Developer Experience. Du hast plötzlich 100%ige Autovervollständigung, wenn du deine Blogposts im Layout renderst. Du tippst post.data. und dein Editor schlägt dir direkt title und author vor. Kein Raten mehr.
Aber okay, Markdown liegt lokal im Code-Repository. Das ist cool für uns Entwickler. Aber was passiert, wenn das Marketing-Team ins Spiel kommt? Die fassen kein Git an. Die wollen ein Headless CMS wie Strapi oder Hygraph nutzen. Wie fetchen wir gewaltige Datenmengen aus APIs in unsere Insel-Welt, ohne den Browser des Nutzers in die Knie zu zwingen?

Headless CMS Integration: Daten-Orchestrierung ohne Overhead
Also, lokales Markdown ist jetzt dank Zod-Schemas absolut sicher. Für uns Entwickler ist das ein Traum. Aber ganz ehrlich? Sobald ein Projekt eine gewisse Größe erreicht und ein Marketing- oder Redaktionsteam an Bord kommt, lachen die dich aus, wenn du ihnen sagst, sie sollen Git-Commits für neue Blogbeiträge machen. Da muss ein anständiges Headless CMS her. Strapi, Hygraph, Sanity – you name it.
Jetzt stellt sich die große Frage: Wie kriegen wir diese massiven Datenmengen aus den APIs in unsere schlanke Astro Islands Architecture, ohne die Performance komplett gegen die Wand zu fahren?
Wenn ich an meine alten Next.js-Zeiten (besonders den Pages Router) zurückdenke, kriege ich fast schon Kopfschmerzen. getServerSideProps, getStaticProps, getInitialProps... was für ein endloses Boilerplate-Massaker, nur um ein paar simple JSON-Daten von einem Server zu kratzen.
Astro macht das so unfassbar simpel, dass man beim ersten Mal denkt, man hätte etwas falsch gemacht. Das Zauberwort heißt: Top-Level Await.
Du gehst in deine .astro-Datei. Ganz nach oben in den Frontmatter-Bereich, also dorthin, wo die drei Bindestriche --- sind. Und dort schreibst du einfach nacktes, asynchrones JavaScript. Genau so, wie du es in einem simplen Node.js-Skript tun würdest.
1---
2const { slug } = Astro.params;
3
4// Purer, nativer Fetch-Aufruf an dein Headless CMS
5const response = await fetch(`https://api.mein-cms.com/articles?slug=${slug}`, {
6 headers: {
7 Authorization: `Bearer ${import.meta.env.CMS_API_KEY}`
8 }
9});
10const { data } = await response.json();
11const article = data[0];
12---
13
14<h1>{article.title}</h1>
15<article set:html={article.content} />Das war's. Keine Wrapper-Funktionen. Keine abstrusen Data-Fetching-Konzepte, für die man erst drei Tage die Doku studieren muss.
Aber hier kommt der eigentliche Architektur-Mindblow, der die Astro Islands Architecture so genial macht: Dieser gesamte Fetch-Block existiert für den Browser deines Nutzers überhaupt nicht.
Nehmen wir an, dein Headless CMS ballert dir für diesen einen Blogpost ein gewaltiges, 5 Megabyte großes JSON-Objekt zurück. Voller Meta-Felder, verschachtelter Relationen und Historien-Daten, von denen du am Ende nur den Titel und den Text brauchst. In einer klassischen SPA hast du oft aus Versehen diesen kompletten Datenmüll an den Client geschickt (Hallo __NEXT_DATA__ Tag, ich schaue dich an).
Astro saugt die 5 Megabyte auf dem Server, rendert dein kleines <h1>-Tag und den Artikel – und schmeißt das JSON danach komplett in den Müll. Über die Leitung zum User geht exakt null Kilobyte JavaScript und null Kilobyte JSON. Nur pures HTML.
Und noch was Wichtiges: Fällt dir das import.meta.env.CMS_API_KEY im Code auf? Da dieser Frontmatter-Code ausschließlich während des Build-Prozesses oder sicher auf dem Server (bei SSR) läuft, wird dein geheimer API-Key niemals versehentlich im Quelltext des Browsers landen. Du hast quasi eine absolute Sicherheitsgarantie "by default".
Das ist alles wunderschön und schnell für den Nutzer. Aber wenn wir 10.000 Seiten aus dem CMS rendern müssen – wie fühlt sich das eigentlich für uns Entwickler an? Sitzen wir dann stundenlang vorm Terminal und warten auf den Build? Lass uns mal einen Blick in den Maschinenraum werfen.

Die Vite-Engine: Hochgeschwindigkeit im Maschinenraum
Okay, die Daten sind da. Das CMS ist angebunden, die Inseln sind strikt isoliert, die Typen durch Zod knallhart gesichert. Aber wie fühlt sich das eigentlich an, wenn man als Dev acht Stunden am Tag in dieser Codebase hängt?
Erinnerst du dich an die dunklen Webpack-Zeiten? Du startest den Dev-Server, holst dir einen Kaffee, quatschst mit den Kollegen, und vielleicht ist der Build danach fertig. Jede winzige CSS-Änderung brauchte gefühlt ewig.
Astro hat sich dieses Elend angeschaut und Webpack komplett vor die Tür gesetzt. Unter der Haube der Astro Islands Architecture brummt Vite. Und der Name (französisch für "schnell") ist verdammtes Programm.
Weil Vite im lokalen Entwicklungsmodus auf native ES-Module (ESM) des Browsers setzt, gibt es kein mühsames Bündeln mehr. Du änderst die Farbe von einem Button, drückst Strg+S, und bevor du überhaupt blinzeln kannst, hat das Hot Module Replacement (HMR) exakt dieses eine Modul im Browser ausgetauscht. Der State bleibt komplett erhalten. Du tippst ein Formular ein, änderst den Code, das Formular ist immer noch ausgefüllt. Das ist ein Developer-Flow, der fast schon süchtig macht.
Geht's dann in die Produktion, übergibt Vite an Rollup. Den knallharten Türsteher. Rollup betreibt aggressives Tree-Shaking. Alles, was nicht aktiv auf deinen Inseln genutzt wird – auch toter Code aus fetten NPM-Packages –, wird gnadenlos aus dem finalen Bundle gelöscht. Dazu gibt es Scoped CSS out of the box. Du brauchst keine ekligen BEM-Klassen mehr. Das Styling bleibt exakt in der Komponente eingeschlossen.
Aber was nützt das geilste, kleinste HTML-Bundle, wenn dein Server in Frankfurt steht, dein User aber in Tokio auf dem Handy surft?
Genau hier schließt sich der architektonische Kreis. Statisches HTML (SSG) wirfst du einfach auf ein globales CDN. Fertig. Aber was ist mit unseren dynamischen server:defer Inseln aus dem vorigen Teil? Wenn die für jeden Aufruf erst um den halben Globus nach Frankfurt telefonieren müssen, stirbt die Performance an der Latenz.
Deshalb war die kürzliche Akquisition von Astro durch Cloudflare ein echter Paukenschlag für die Branche. Cloudflare betreibt eines der krassesten Edge-Netzwerke der Welt. Traditionelle Serverless-Funktionen bei AWS und Co. haben oft eklige "Cold Starts". Wenn die Funktion schläft, kostet das Aufwachen wertvolle Millisekunden. Cloudflare Workers (basierend auf V8 Isolates) kennen dieses Problem praktisch nicht. Die Startzeiten liegen nahe null Millisekunden.
Dein dynamischer Avatar, der Live-Warenkorb, die personalisierten Preise – diese ganzen kleinen Server Islands werden jetzt nicht mehr in einem zentralen Rechenzentrum berechnet, sondern direkt am nächsten Edge-Knotenpunkt in der Stadt deines Nutzers. Der statische Rahmen kommt pfeilschnell vom CDN, die dynamischen Inseln blitzschnell von der Edge. Schneller geht es physikalisch nicht.

Edge Deployment und die Cloudflare-Ära
Die rasanteste Build-Engine nützt wenig, wenn die finale Auslieferung an den Endnutzer durch quälend langsame Server-Antwortzeiten (TTFB) ausgebremst wird. Hier spielt Astro seine architektonischen Karten voll aus. Da das Framework standardmäßig auf extrem optimiertes, statisches HTML setzt, lässt es sich perfekt über globale Content Delivery Networks (CDNs) verteilen.
Doch im Jahr 2026 gehen wir noch einen gewaltigen Schritt weiter: ab an die Edge. Besonders für die zuvor besprochenen dynamischen Server Islands brauchen wir eine Infrastruktur, die Code nicht in einem zentralen Rechenzentrum in Frankfurt ausführt, sondern direkt in der Stadt des Nutzers – sei es in Tokio, New York oder Sydney.
Genau hier kommt ein massives Beben ins Spiel, das die Entwickler-Szene kürzlich erschüttert hat: Die strategische Akquisition von Astro durch Cloudflare. Dieser Zusammenschluss ist kein reiner Business-Move, sondern ein technologisches Match made in Heaven. Cloudflare betreibt eines der größten und schnellsten Edge-Netzwerke unseres Planeten.
Traditionelle Serverless-Funktionen (wie sie oft bei herkömmlichen Hostern zum Einsatz kommen) leiden unter dem berüchtigten "Cold Start"-Problem. Wenn eine Funktion längere Zeit nicht aufgerufen wurde, dauert das Hochfahren wertvolle Millisekunden – ein absoluter Performance-Killer für dynamische Webseiten. Cloudflare Workers hingegen eliminieren dieses Problem durch ihre revolutionäre Isolates-Architektur fast vollständig. Deine Astro Server Islands werden nun durch V8-Engines direkt am lokalen Edge-Knotenpunkt gerendert, mit Startzeiten nahe null Millisekunden. Das Ergebnis ist eine brillante Symbiose aus lokaler statischer Auslieferung und verzögerungsfreier dynamischer Injektion.

Teil der Serie
Next.js vs. Remix vs. Astro
Häufig gestellte Fragen (FAQ)
Die Rückkehr zur Vernunft
Die Astro Islands Architecture ist kein kurzlebiger Hype, der morgen wieder verschwindet. Sie ist eine knallharte Rückbesinnung auf das, was das Web eigentlich immer sein sollte.
Wir haben jahrelang den völlig irren Fehler gemacht, jeden simplen Text-Blog in eine tonnenschwere JavaScript-Applikation zu pressen. Wir haben die Smartphone-Akkus unserer Nutzer brennen lassen, nur um als Entwickler die Bequemlichkeit von React nutzen zu können. Astro hat bewiesen: Wir können diese großartige Developer Experience behalten, OHNE dem User Megabytes an unnötigem Code reinzuwürgen.
Wenn du das nächste Mal einen Klon von Figma, Spotify oder ein hochkomplexes SaaS-Dashboard baust – go for it, nimm Next.js oder Remix. Genau dafür sind dicke SPAs gemacht.
Aber sobald der verdammte Content im Mittelpunkt steht? Sobald du Artikel, Produkte, Portfolios oder Landingpages an den Mann bringen willst? Dann ist es an der Zeit, den SPA-Monolithen endgültig zu beerdigen. Setz auf Astro, schrumpfe dein JavaScript auf das absolute Minimum und schau grinsend zu, wie deine Lighthouse-Scores völlig entspannt auf die 100 klettern.
Dies schließt den ersten Cluster-Artikel unserer Serie ab. Du verstehst nun die radikale Architektur, die partielle Hydratation und die atemberaubende Performance, die Astro ermöglicht. Im nächsten Teil wagen wir den direkten Code-Vergleich auf der Server-Ebene: Next.js App Router vs. Remix Data Fetching.

Dietrich Bojko
Senior Webentwickler
Webinteger arbeitet seit vielen Jahren produktiv mit
Linux-basierten Entwicklungsumgebungen unter Windows.
Der Fokus liegt auf
performanten Setups mit WSL 2, Docker, PHP, Node.js und modernen
Build-Tools in realen Projekten –
nicht auf theoretischen Beispielkonfigurationen.
Die Artikel dieser Serie entstehen direkt aus dem täglichen Einsatz in Kunden- und Eigenprojekten und dokumentieren bewusst auch typische Fehler, Engpässe und bewährte Workarounds.


