
Perché ho scelto Astro: Island Architecture e Performance Reali
Quando ho deciso di ricostruire il mio portfolio, la tentazione di usare una Single Page Application (SPA) con Next.js o React puro era forte. Sono tecnologie che uso quotidianamente. Tuttavia, per un sito di contenuti e presentazione, l’approccio SPA porta con sé un peso inutile (overhead).
Ecco perché ho scelto Astro e perché, tecnicamente, è superiore per questo caso d’uso.
Il problema dell’Idratazione (Hydration)
In una tipica applicazione React (o Next.js), il browser scarica un file HTML quasi vuoto e poi un enorme bundle JavaScript che deve essere analizzato ed eseguito per “disegnare” la pagina. Questo processo si chiama idratazione. Il problema?
- TTI (Time to Interactive) alto: L’utente vede la pagina, ma non può cliccare nulla finché il JS non ha finito di caricare.
- CPU Mobile sotto stress: Sugli smartphone economici, l’esecuzione di tutto quel JS blocca il browser, creando lag nello scroll.
La Soluzione: Island Architecture 🏝️
Astro ribalta il paradigma (MPA - Multi Page App). Di default, spedisce 0kb di JavaScript. È solo HTML e CSS puri renderizzati lato server. Ma se mi serve un componente interattivo, come il menu mobile o un form di contatto?
Qui entrano in gioco le Isole. Posso dire ad Astro: “Questa pagina è statica, ma questo singolo componente deve essere interattivo (idratato)”.
---
// Il resto della pagina è statico HTML puro
import MobileMenu from '../components/MobileMenu.jsx';
import ThemeToggle from '../components/ThemeToggle.svelte';
---
<MobileMenu client:visible />
<ThemeToggle client:load />
I Risultati
Grazie a questo approccio, il mio portfolio ottiene costantemente 100/100 su Lighthouse. Non sto caricando l’intera libreria React per mostrare un testo statico “Chi Sono”. Sto caricando React (o Preact, o Svelte) solo per quel piccolo pezzo di interfaccia che ne ha bisogno.
Questa è l’efficienza che cerco di portare in ogni progetto cliente: usare la tecnologia per risolvere problemi di performance, non per crearne di nuovi.