Jason Miller (Preact) a popularisé le terme “Islands Architecture” en 2019. L’idée : au lieu d’hydrater toute la page en JavaScript (comme une SPA), on hydrate uniquement des “îlots” d’interactivité. Le reste de la page reste en HTML statique. Astro a fait de ce pattern son fondement, et les résultats parlent d’eux-mêmes : des sites avec des scores Lighthouse parfaits tout en ayant des composants interactifs.
de JavaScript transféré vs hydration classique (590KB → 105KB)
du Largest Contentful Paint (4.6s → 1.6s sur YouTube mobile)
Le Contexte
L'architecture qui change tout
L’Islands Architecture, c’est comme construire une maison : les murs porteurs (HTML statique) sont montés en premier et ne bougent jamais. Les portes et fenêtres (composants interactifs) sont installées par la suite : elles bougent, s’ouvrent, se ferment, mais n’affectent pas la structure. Une SPA, c’est l’inverse : tout est mouvant dès le départ, même là où ça ne sert à rien.
L’Islands Architecture est idéale pour les sites de contenu (blogs, docs, marketing) où 80% de la page est statique. Pour les applications 100% interactives (dashboards, SaaS), préférez un framework classique (React, Vue) : l’îlot ajoute de la complexité sans gain.
Concept visuel
┌─────────────────────────────────────────┐
│ Header : HTML statique │ ← Zéro JS
├─────────────────────────────────────────┤
│ Hero : HTML statique │ ← Zéro JS
├─────────────────────────────────────────┤
│ ┌─────────────────────────────────┐ │
│ │ React Counter (client:load) │ │ ← Îlot hydraté
│ │ const [count, setCount] = ... │ │ ← React chargé
│ └─────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ ┌─────────────────────────────────┐ │
│ │ Gallery (client:visible) │ │ ← Îlot hydraté
│ │ images, lightbox... │ │ au scroll
│ └─────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ Footer : HTML statique │ ← Zéro JS
└─────────────────────────────────────────┘ Directives d’hydratation
client:load
Hydrate immédiatement au chargement de la page. Pour les composants visibles tout de suite et critiques pour l’interaction : navigation, recherche, panier.
client:visible
Hydrate au scroll quand le composant entre dans le viewport. Pour les sections hors écran au chargement : footer, galerie d’images, modales. Économie de JS maximale.
client:media
Hydrate uniquement à partir d’un breakpoint CSS : client:media="(min-width: 768px)". Pour les composants desktop uniquement : sidebar, tableaux complexes.
client:only
Hydrate côté client uniquement, sans SSR. Pour les composants qui dépendent exclusivement des API navigateur : WebGL, canvas, IndexedDB, WebRTC.
Exemple concret
---
import Header from '../components/Header.astro';
import Hero from '../components/Hero.astro';
import Search from '../components/Search.jsx';
import Gallery from '../components/Gallery.vue';
import Footer from '../components/Footer.astro';
---
<!-- HTML statique : zéro JS -->
<Header />
<Hero />
<!-- Hydraté immédiatement (visible tout de suite) -->
<Search client:load />
<!-- Hydraté au scroll (hors écran au départ) -->
<Gallery client:visible />
<!-- HTML statique : zéro JS -->
<Footer /> Performance : avant vs après
- ❌ Toute la page hydrate en JS
- ❌ Bundle monolithique (200-500 KB)
- ❌ LCP lent (2-4 secondes)
- ❌ Zéro HTML avant exécution JS
- ✅ Seulement les îlots hydratent
- ✅ Bundles atomiques (0-50 KB)
- ✅ LCP rapide (0.8-1.5 secondes)
- ✅ HTML complet dès le premier chargement
Quand créer un îlot ?
Tout composant n’a pas besoin d’être un îlot. Posez-vous ces questions :
- L’utilisateur interagit-il directement ? → Oui, le composant a besoin de clics, saisies, glisser-déposer → Îlot probable
- Le composant change-t-il après le render ? → Si c’est juste un affichage CSS (accordéon, tooltip en CSS), pas besoin d’îlot
- Le composant dépend-il de données externes ? → Si les données sont chargées côté client → Îlot nécessaire
- Peut-on le faire en HTML/CSS pur ? → 80% des composants “interactifs” peuvent être remplacés par du CSS (hover, focus, transitions)
Règle : commencez sans îlot, ajoutez-en uniquement quand l’interactivité le justifie.
Limites et pièges à éviter
Partage d'état entre îlots
Pas de props directes entre frameworks différents, seul le store (Zustand, Nano Stores, BroadcastChannel) agira comme médiateur.
Pas pour les dashboards
Les applications 100% interactives (SaaS, dashboards) perdent en simplicité. Chaque composant = un îlot = un bundle séparé.
Hydratation visible
Si les îlots sont nombreux, le lecteur voit des zones qui “apparaissent” au scroll. Impact UX sur les connexions lentes.
Debug plus complexe
Les erreurs JS sont dispersées entre îlots. Pas de stack trace unifié comme dans une SPA.
Composants Astro
Comment créer des composants Astro réutilisables avec les directives client et les slots ?
En cours de rédaction
Cet article est en cours de rédaction. Inscrivez-vous à la newsletter pour être averti de sa publication.
Newsletter
Un récap par mois de ce qui a vraiment compté. Pas de spam, promis.
Alternatives à connaître
| Pattern | Quand l'utiliser | Exemple |
|---|---|---|
| Islands (Astro) | Sites de contenu, blogs, docs | Blog technique, landing page |
| Resumable (Qwik) | Apps interactives sans hydration | SaaS, dashboards |
| RSC (Next.js) | Apps React avec server components | E-commerce, apps complexes |
| MPA classique (Hugo, Jekyll) | Sites 100% statiques | Documentation, portfolio |
| SPA (React, Vue) | Apps 100% interactives | Gmail, Figma, Notion |
Des zones d'ombre ?
Puis-je utiliser plusieurs frameworks dans une même page ?
L'Islands Architecture est-elle réservée à Astro ?
Quel est l'impact SEO de l'Islands Architecture ?
Comment partager l'état entre deux îlots ?
Checklist Islands
Adoption Islands Architecture
0/8Vos progrès sont sauvegardés localement sur votre appareil. Aucune donnée n'est collectée. La durée de conservation dépend de la durée de rétention des données de votre navigateur.
L’architecture Islands incarne la philosophie que j’applique chaque jour : n’envoyez que ce qui est nécessaire, au moment où ça l’est.
Prêt à lancer votre projet ?
Je donne vie à vos idées en créant des sites web et applications intuitifs, esthétiques et fonctionnels.
Articles Connexes
0+2
Core Web Vitals : LCP, INP, CLS : les Métriques qui Comptent
Maîtrisez les Core Web Vitals : LCP, INP et CLS. Seuils, optimisation, outils de mesure et stratégie d'amélioration continue pour satisfaire Google et vos utilisateurs.

Composants Astro
Maîtrisez les composants Astro (.astro) avec leurs slots, props et patterns. Créez des composants performants avec zero JavaScript par défaut.
Inspiration
Découvrez d'autres projets
Bao-Link Documentation : De WordPress à un Écosystème Centré Utilisateur
Le projet Bao-Link raconte l'évolution du site et de ses outils: la création d'un premier site WordPress vitrine, puis le passage à Astro avec un site 100% sur mesure, sans template, centré sur le SEO et l'expérience utilisateur ainsi que les projets liés : diag-application et personas.
ACM : Refonte E-commerce avec Astro, Express & WordPress
Étude de cas complète : migration d'un site e-commerce WordPress/WooCommerce vers une architecture Astro SSR + proxy Express, avec déploiement et optimisation SEO.
Soair : La Transition Numérique Complète
Étude de cas complète : création d'un site WordPress professionnel puis migration vers Hugo pour des performances optimales et un SEO décuplé.