Single-page application

In informatica con Single-page application (in italiano: applicazione su singola pagina) o in sigla SPA si intende un'applicazione web o un sito web che può essere usato o consultato su una singola pagina web con l'obiettivo di fornire una esperienza utente più fluida e simile alle applicazioni desktop dei sistemi operativi tradizionali.

In un'applicazione su singola pagina tutto il codice necessario (HTML, JavaScript e CSS) è recuperato in un singolo caricamento della pagina o le risorse appropriate sono caricate dinamicamente e aggiunte alla pagina quando necessario, di solito in risposta ad azioni dell'utente.

A sinistra un sito single page. A destra uno multi-page

La pagina non si ricarica in nessun punto del processo, né lascia il controllo in un'altra pagina, sebbene moderne tecnologie web come la API pushState() di HTML5 può fornire la percezione e la navigabilità in pagine logiche separate nell'applicazione. L'interazione con una applicazione a singola pagina spesso coinvolge una comunicazione dinamica con il web server.

Approcci tecnici

Sono disponibili varie tecniche che consentono al browser di conservare una singola pagina anche quando l'applicazione richiede la comunicazione con il server.

Framework JavaScript

I framework e le librerie JavaScript del browser Web, come AngularJS, Ember.js, ExtJS, Knockout.js , Meteor.js, React, Vue.js e Svelte hanno adottato i principi SPA. A parte ExtJS, tutti questi sono open source.

Ajax

A partire dal 2006, la tecnica più importante utilizzata è stata l'Ajax. Ajax prevede l'utilizzo di richieste asincrone a un server per dati XML o JSON, come XMLHttpRequest di JavaScript o il più moderno fetch () (dal 2017) o l'oggetto ActiveX deprecato. In contrasto con l'approccio dichiarativo della maggior parte dei framework SPA, con Ajax il sito Web utilizza direttamente JavaScript o una libreria JavaScript come jQuery per manipolare il DOM e modificare gli elementi HTML. Ajax è stato ulteriormente reso popolare da librerie come jQuery, che fornisce una sintassi più semplice e normalizza il comportamento Ajax su diversi browser che storicamente avevano comportamenti diversi.

WebSocket

I WebSocket sono una tecnologia di comunicazione client-server bidirezionale in tempo reale che fa parte della specifica HTML5. Per la comunicazione in tempo reale, il loro utilizzo è superiore ad Ajax in termini di prestazioni e semplicità.

Trasporto dei dati (XML, JSON e AJAX)

Le richieste al server in genere danno come risultato la restituzione di dati non elaborati (ad es. XML o JSON) o di nuovo HTML. Nel caso in cui l'HTML venga restituito dal server, JavaScript sul client aggiorna un'area parziale del DOM (Document Object Model). Quando vengono restituiti dati grezzi, spesso viene utilizzato un processo JavaScript XML / (XSL) lato client (e nel caso di JSON un modello) per tradurre i dati grezzi in HTML, che viene quindi utilizzato per aggiornare un'area parziale del DOM.

Eventi inviati dal server

Gli eventi inviati dal server (SSE) sono una tecnica con cui i server possono avviare la trasmissione dei dati ai client del browser. Una volta stabilita una connessione iniziale, un flusso di eventi rimane aperto fino a quando non viene chiuso dal client. Gli SSE vengono inviati tramite HTTP tradizionale e dispongono di una varietà di funzionalità che ai WebSocket mancano, come la riconnessione automatica, eventi ID e la capacità di inviare eventi arbitrari.

Plugin del browser

Era possibile ottenere chiamate asincrone al server anche utilizzando tecnologie di plug-in del browser come Silverlight, Flash o applet Java, ora deprecati.

Architettura del server

Architettura del server sottile

Una SPA sposta la logica dal server al client, con il ruolo del server web che si evolve in una pura API di dati o servizio web. Questo cambiamento architettonico è stato, in alcuni ambienti, chiamato "architettura server sottile" per evidenziare che la complessità è stata spostata dal server al client.

Architettura spessa con stato del server

Il server mantiene lo stato necessario in memoria dello stato client della pagina. In questo modo, quando una qualsiasi richiesta colpisce il server (solitamente azioni dell'utente), il server invia l'HTML e/o il JavaScript appropriato con le modifiche concrete per portare il client al nuovo stato desiderato (solitamente aggiungendo/cancellando/aggiornando una parte del client DOM). Allo stesso tempo, lo stato nel server viene aggiornato. La maggior parte della logica viene eseguita sul server e di solito anche l'HTML viene visualizzato sul server. In un certo senso il server simula un browser Web, riceve eventi ed esegue modifiche delta nello stato del server che vengono propagate automaticamente al client.

Questo approccio richiede più memoria ed elaborazione del server, ma il vantaggio è un modello di sviluppo semplificato perché l'applicazione è completamente codificata nel server e i dati e lo stato dell'interfaccia utente nel server sono condivisi nello stesso spazio.

Architettura spessa del server senza stato

Questa è una variante dell'approccio del server "stateful". La pagina client invia i dati che rappresentano il suo stato corrente al server, solitamente tramite richieste Ajax. Utilizzando questi dati, il server è in grado di ricostruire lo stato client della parte della pagina che deve essere modificata e può generare i dati o il codice necessari (ad esempio JSON o JavaScript), che viene restituito al client per portarlo in un nuovo stato, di solito modificando il DOM della pagina in base all'azione del client che ha fatto la richiesta.

Questo approccio richiede l'invio di più dati al server e potrebbe richiedere più risorse per ricostruire parzialmente o completamente lo stato della pagina client nel server. Allo stesso tempo, questo approccio è più facilmente scalabile perché non ci sono dati di pagina per client conservati nel server, quindi le richieste Ajax possono essere inviate a diversi nodi del server senza necessità di condivisione dei dati di sessione o affinità del server.

Esecuzione in locale

Alcuni SPA possono essere eseguiti da un file locale utilizzando lo schema URI del file. Ciò offre agli utenti la possibilità di scaricare la SPA da un server ed eseguire il file da un dispositivo di archiviazione locale, senza dipendere dalla connettività del server. Se tale SPA desidera archiviare e aggiornare i dati, deve utilizzare Web Storage basato su browser. Queste applicazioni beneficiano di HTML5.

Sfide con il modello SPA

Poiché la SPA è un'evoluzione rispetto al modello di ridisegno delle pagine senza stato per cui i browser erano stati originariamente progettati, sono emerse alcune nuove sfide. Possibili soluzioni (di varia complessità, completezza e controllo dell'autore) includono:

Critiche

Ai siti web a pagina singola sono state mosse diverse critiche:

Note

  1. ↑ AngularJS — Superheroic JavaScript MVW Framework, su angularjs.org. URL consultato il 1º giugno 2022.
  2. ↑ (EN) Ember.js - A framework for ambitious web developers, su emberjs.com. URL consultato il 1º giugno 2022.
  3. ↑ Knockout : Home, su knockoutjs.com. URL consultato il 1º giugno 2022.
  4. ↑ Meteor Software: A Platform to Build, Host, Deploy and Scale Full-Stack Javascript Applications, su www.meteor.com. URL consultato il 1º giugno 2022.
  5. ↑ Server Side Rendering for Meteor | MeteorHacks, su meteorhacks.com. URL consultato il 18 gennaio 2021 (archiviato dall'url originale il 20 marzo 2015).
  6. ↑ (EN) React – A JavaScript library for building user interfaces, su reactjs.org. URL consultato il 1º giugno 2022.
  7. ↑ (EN) Vue.js - The Progressive JavaScript Framework | Vue.js, su vuejs.org. URL consultato il 1º giugno 2022.
  8. ↑ (EN) Svelte • Cybernetically enhanced web apps, su svelte.dev. URL consultato il 1º giugno 2022.
  9. ↑ (EN) David Flanagan, JavaScript: The Definitive Guide: The Definitive Guide, "O'Reilly Media, Inc.", 17 agosto 2006, ISBN 978-0-596-55447-7. URL consultato il 18 gennaio 2021.
  10. ↑ CSDL | IEEE Computer Society, su computer.org. URL consultato il 18 gennaio 2021.
  11. ↑ Using InnerHTML, su webrocketx.com. URL consultato il 18 gennaio 2021.
  12. ↑ unhosted web apps, su unhosted.org. URL consultato il 18 gennaio 2021.
  13. ↑ DerbyJS, su derbyjs.com. URL consultato il 18 gennaio 2021.
  14. ↑ balderdashy/sails, Balderdash, 18 gennaio 2021. URL consultato il 18 gennaio 2021.
  15. ↑ ItsNat, su itsnat.sourceforge.net. URL consultato il 18 gennaio 2021.
  16. ↑ (EN) Sean, 5 Best Reasons Why Single Page Websites Are Bad For SEO, su SEO Hacker | Philippine based SEO Company, 27 giugno 2018. URL consultato il 18 gennaio 2021.
  17. ↑ Gli svantaggi dei siti One Page | Flavioweb.net, su flavioweb.net. URL consultato il 18 gennaio 2021.
  18. ↑ Salvatore Capolupo, L’arte dei siloing – Come strutturare il tuo sito web, su capolooper.it, 13 dicembre 2020. URL consultato il 18 gennaio 2021.
  19. ↑ Seo Siloing: la SEO nella struttura dei siti web, su AvantGrade, 9 gennaio 2020. URL consultato il 18 gennaio 2021.

Collegamenti esterni

  Portale Internet: accedi alle voci di Wikipedia che trattano di internet