Uitleg

De islands-architectuur van Astro, in mensentaal uitgelegd

Wat is de islands-architectuur van Astro? Hoe interactieve eilanden je site snel houden door alleen JavaScript te laden waar het echt nodig is.

De meeste moderne websites sturen een volledige JavaScript-applicatie naar je browser, die daar de pagina opbouwt. Dat is krachtig voor echte apps, maar overkill voor een site die vooral content toont. De islands-architectuur van Astro is het antwoord daarop: ze houdt de pagina licht door interactie te beperken tot losse eilanden. Het klinkt technisch, maar het idee is verrassend eenvoudig.

Het idee in een zin

Een Astro-pagina is statische HTML. De stukken die interactie nodig hebben, zoals een carousel, een zoekbalk of een prijscalculator, worden geisoleerde eilanden met hun eigen JavaScript. Alles daartussen blijft gewoon HTML, zonder JavaScript.

Waarom is de klassieke aanpak traag?

Bij een klassieke single-page app moet de browser eerst de hele applicatie downloaden en uitvoeren voor er iets zichtbaar en bruikbaar is. Dat kost tijd en rekenkracht, zeker op een gemiddelde telefoon. Je betaalt de volledige JavaScript-kost, ook voor pagina’s die nauwelijks interactie hebben.

Met islands krijgt de browser de pagina meteen als HTML te zien. De eilanden laden daarna, onafhankelijk van elkaar. Een zware widget onderaan vertraagt de knop bovenaan niet, want elk eiland staat op zichzelf.

Wat is een island precies?

Een island is een afgebakend, interactief component op een verder statische pagina. Denk aan een filterbalk in een productoverzicht, een formulier of een video-speler. Astro rendert eerst de HTML van dat component (zodat het meteen zichtbaar is), en “hydrateert” het daarna: het bijbehorende JavaScript laadt en maakt het interactief. Buiten die eilanden is er simpelweg geen component-JavaScript om te laden.

Wanneer laadt een island?

Dit is de sleutel tot de snelheid. Je bepaalt per island wanneer het hydrateert met een directive. Zo laad je niets te vroeg.

Directive Wanneer het laadt Goed voor
client:load Meteen bij het laden van de pagina Wat direct interactief moet zijn
client:idle Zodra de browser even niets te doen heeft Minder dringende widgets
client:visible Pas wanneer het component in beeld komt Alles onder de vouw
client:media Bij een bepaalde schermbreedte Mobiel-specifieke interactie
client:only Alleen in de browser, geen server-HTML Componenten die niet vooraf renderbaar zijn

Een chatwidget die pas laadt wanneer iemand naar onder scrollt, kost zo niets bij het openen van de pagina. Dat is interactie zonder dat de bezoeker er bij de eerste indruk voor betaalt.

Server islands

Naast interactieve eilanden in de browser bestaan er server islands. Die renderen een dynamisch of persoonlijk deel (bijvoorbeeld een ingelogde naam, een live voorraad of een gepersonaliseerde aanbeveling) apart op de server, terwijl de rest van de pagina statisch en cachebaar blijft. Zo combineer je de snelheid van statische HTML met dynamiek precies waar het moet, zonder de hele pagina dynamisch te maken.

Breng je eigen framework mee

Astro dwingt geen frameworkkeuze af. Je schrijft componenten in .astro, en kan er React, Svelte, Vue of Solid naast gebruiken voor de eilanden, zelfs door elkaar in hetzelfde project. Astro stript de runtime waar je die niet nodig hebt, zodat bezoekers enkel HTML en CSS binnenkrijgen tenzij interactie het vraagt. Je hergebruikt dus bestaande componenten zonder de prestatieprijs van een volledige clientside-app.

Wat het voor je site betekent

De praktische winst is dubbel. Je site laadt sneller, want er is minder JavaScript te verwerken, wat rechtstreeks helpt voor de Core Web Vitals. En je site blijft beheersbaar, want interactie is netjes afgebakend in plaats van verweven door een grote applicatie. Voor content-gerichte sites is dat bijna altijd de betere ruil. Meer over de gevolgen voor vindbaarheid lees je in Core Web Vitals en SEO.

Veelgehoorde misverstanden

  • “Islands betekent geen JavaScript.” Niet waar: je kan zoveel interactie toevoegen als je wil, je betaalt er alleen voor waar je het plaatst.
  • “Het is hetzelfde als lazy loading.” Lazy loading stelt het laden van een resource uit; islands isoleren bovendien de interactie per component, met server-HTML eronder.
  • “Je moet kiezen tussen statisch en dynamisch.” Met server islands hoeft dat niet: statische hoofdcontent en dynamische stukken leven samen op een pagina.

Conclusie

De islands-architectuur is geen trucje, maar een andere standaard: niets sturen, tenzij het nodig is. Dat is precies waarom een Astro-site licht aanvoelt, ook bij veel content of meerdere interactieve onderdelen. Wil je het in actie zien, bekijk dan de release calendar, die zelf met deze aanpak is gebouwd, of lees wat Astro precies is.

FAQ

Veelgestelde vragen

Wat is een island in Astro?

Een island is een interactief component (zoals een carousel of zoekbalk) dat zijn eigen JavaScript laadt. De rest van de pagina blijft statische HTML zonder JavaScript.

Waarom is dat sneller?

Omdat de browser alleen JavaScript krijgt voor de eilanden die het echt nodig hebben, in plaats van een volledige app te downloaden en uit te voeren voor de hele pagina.

Wat is hydration?

Hydration is het moment waarop statische HTML interactief wordt doordat het bijbehorende JavaScript laadt en zich aan de markup koppelt. Bij Astro gebeurt dat per eiland, en pas wanneer jij dat wil.

Kan ik React of Vue in een island gebruiken?

Ja. Astro ondersteunt React, Svelte, Vue, Solid en andere frameworks naast eigen .astro-componenten, en laadt hun runtime alleen waar je een island plaatst.

Wat zijn server islands?

Server islands renderen een dynamisch of persoonlijk deel van de pagina apart op de server, zodat de hoofdcontent statisch en cachebaar kan blijven.

Wanneer gebruik ik welke laad-strategie?

Gebruik client:load voor wat meteen interactief moet zijn, client:idle voor minder dringende widgets, en client:visible voor alles wat pas telt zodra het in beeld komt, zoals een component onderaan de pagina.

Bronnen en referenties

Astro (officieel)

AstroIslandsPerformanceJavaScriptHydration

Terug naar de blog