Cos'è una single-page application (SPA)?

  • vuetelemetry
  • Guide
  • 6 min di lettura

Una single-page application si carica una volta e poi riscrive la pagina nel browser mentre navighi. Ecco cosa significa, perché è diventata popolare e i compromessi da conoscere.

Una single-page application, o SPA, è un sito web che carica un singolo documento HTML una volta e poi aggiorna il contenuto nel browser mentre interagisci, invece di recuperare una pagina nuova di zecca dal server a ogni clic. La «pagina singola» è letterale: il browser non esegue mai un ricaricamento completo durante l'uso normale. Tutto dopo quel primo caricamento è gestito da JavaScript che riscrive la pagina corrente.

Dai siti multipagina alla pagina singola

Codice sorgente di framework JavaScript con funzioni di scope e controller, mostrato su uno schermo.
Codice sorgente di framework JavaScript con funzioni di scope e controller, mostrato su uno schermo.

Per apprezzare perché esistono le SPA, aiuta ricordare il modello tradizionale contro cui hanno reagito. In un classico sito multipagina, ogni link o invio di form chiede al server un nuovo documento HTML completo, che il browser poi carica da zero — intestazione, piè di pagina e tutto. È semplice e robusto, ma ogni navigazione comporta un ricaricamento visibile e un viaggio di andata e ritorno al server, il che può sembrare lento e sconnesso.

Una SPA capovolge tutto questo. Il server invia una shell HTML e un bundle di JavaScript alla prima visita; da quel momento, navigare verso una nuova «pagina» esegue codice nel browser che sostituisce la parte rilevante dell'interfaccia e recupera solo i dati di cui ha bisogno, di solito come JSON da un'API. Poiché non c'è un ricaricamento completo, le transizioni possono essere istantanee e l'esperienza si avvicina a quella di un'app desktop o mobile.

I framework e l'attrattiva delle SPA

Questo è precisamente il territorio dei framework front-end. React, Vue, Svelte e Angular esistono in gran parte per rendere gestibile la costruzione di SPA, fornendo i componenti, la gestione dello stato e il routing lato client che scambiano le viste senza ricaricare. Quando senti che un sito è «costruito con React» o «costruito con Vue», molto spesso è una SPA — il framework è ciò che rende pratico costruire e mantenere il modello a pagina singola.

  • SPA: carica una shell HTML, poi aggiorna il contenuto nel browser via JS
  • Costruita con framework come React, Vue, Svelte o Angular
  • Pro: navigazione veloce e simile a un'app dopo il primo caricamento
  • Contro: primo caricamento più pesante; serve cura per SEO, accessibilità, routing
  • L'SSR (Next.js, Nuxt) dà un primo paint veloce più navigazione SPA

L'attrattiva è un'esperienza genuinamente più fluida. Una volta caricato il bundle iniziale, le interazioni sono veloci perché l'app richiede solo dati anziché interi documenti, e l'interfaccia può aggiornarsi fluidamente senza lo sfarfallio di un ricaricamento. Per prodotti altamente interattivi — dashboard, editor, web app che si comportano come software — questa reattività è un vantaggio reale e duraturo rispetto al modello multipagina.

I compromessi, in tutta onestà

Ma il modello SPA porta compromessi onesti che devi progettare attorno piuttosto che ignorare. Il primo caricamento è più pesante, perché il browser deve scaricare ed eseguire un bundle JavaScript prima di mostrare contenuto significativo, il che può danneggiare l'esperienza su connessioni lente o dispositivi modesti. Se quel bundle cresce senza controllo, la stessa velocità promessa dalla SPA può trasformarsi in una schermata iniziale lenta e vuota.

Ricerca e accessibilità meritano cura particolare. Poiché gran parte del contenuto è renderizzato da JavaScript dopo il caricamento, i motori di ricerca e gli strumenti che non eseguono script possono vedere una shell vuota a meno che tu non prenda misure deliberate. Anche il routing lato client deve essere implementato con attenzione affinché il pulsante indietro del browser, i deep link e la cronologia si comportino come gli utenti si aspettano, anziché rompersi in modi sottili.

Il rendering lato server in soccorso

La risposta del settore a questi compromessi è il rendering lato server e i suoi parenti. Meta-framework come Next.js per React e Nuxt per Vue renderizzano la pagina iniziale sul server così che l'utente — e i motori di ricerca — ottengano contenuto reale immediatamente, poi lo «idratano» in una SPA completa nel browser. Questo ibrido mantiene il primo paint veloce dei siti tradizionali e la navigazione fluida di una SPA, motivo per cui così tante app moderne lo adottano.

La risposta del settore a questi compromessi è il rendering lato server e i suoi parenti. Meta-framework come Next.js per React e Nuxt per Vue renderizzano la pagina iniziale sul server così che l'utente — e i motori di ricerca — ottengano contenuto reale immediatamente, poi lo «idratano» in una SPA completa nel browser. Questo ibrido mantiene il primo paint veloce dei siti tradizionali e la navigazione fluida di una SPA, motivo per cui così tante app moderne lo adottano.

— vuetelemetry

Scegliere la SPA con cognizione di causa

Niente di tutto questo rende la SPA universalmente giusta o sbagliata. Un sito di contenuti fatto perlopiù di articoli può essere servito meglio da un approccio tradizionale o statico, mentre un'applicazione riccamente interattiva beneficia enormemente del modello SPA. L'abilità sta nello scegliere deliberatamente, sapendo che «pagina singola» ti compra interattività fluida in cambio di un primo caricamento più pesante e di più responsabilità per ricerca e accessibilità.

Compresa così, la single-page application non è una parola d'ordine ma una scelta architetturale specifica con punti di forza chiari e costi chiari. Si carica una volta, gira nel browser e sembra un'app — e quando la abbini al rendering lato server, puoi avere gran parte di quel beneficio senza pagarne il prezzo pieno. Conoscere i compromessi è ciò che ti permette di ricorrervi al momento giusto.

Stack correlato