Cosa si intende per Jamstack e perché potrebbe essere il futuro del web

December 10, 2020
Cosa si intende per Jamstack e perché potrebbe essere il futuro del web

Non c'è dubbio che il web sia stato uno dei principali motori dell'innovazione negli ultimi vent'anni. Allo stesso modo anche le tecnologie su cui si basa sono sempre state in costante evoluzione.

Eppure anche in questo campo esistono degli elementi che da molti vengono dati per scontati, perché in fondo "abbiamo sempre fatto così". Un affermazione paradossale considerato che il web non ha più di 30 anni.

Uno di questi elementi "tradizionali" è la convinzione che il server debba generare il contenuto da trasmettere al client al momento della richiesta, eventualmente leggendo in real time da un database i dati necessari.

Su questo approccio si basa LAMP (Linux, Apache, MySql, PHP), senza dubbio uno degli stack tecnologici di maggior successo del web, nonché il vero campione del web tradizionale, ovvero WordPress, che ad oggi viene utilizzato da oltre il 39% di tutti i siti web.

Capiamoci, non c'è nulla di sbagliato nelle tecnologie tradizionali per il web o in WordPress. Però è importante chiedersi sempre se sia possibile fare meglio. Secondo i sostenitori di Jamstack la risposta è sì.

Ma quindi: cosa cavolo è Jamstack?

Jamstack is an architecture designed to make the web faster, more secure, and easier to scale. It builds on many of the tools and workflows which developers love, and which bring maximum productivity. – Jamstack.org

Il nome è l'unione dell'acronimo "JAM", che sta per JavaScript - API - Markup e la parola "stack", ad indicare che siamo di fronte ad un insieme di tecnologie che coprono diversi livelli di un'architettura.

Secondo me, però, il nome non rende bene l'idea alla base di questa architettura, quindi vediamone nel dettaglio il funzionamento.

Architettura Jamstack

Come funziona Jamstack

CMS Headless

Il primo elemento caratteristico di Jamstack è un CMS cosiddetto "Headless". Questo significa che il sistema di gestione dei contenuti non è accoppiato con il sito. Non si trova sulla stessa piattaforma, spesso neanche sullo stesso server.

Sito e CMS sono due cose completamente distinte.

Gli editor, quindi, accedono al CMS e creano i contenuti senza preoccuparsi di come e quando questi verranno pubblicati sul sito.

La stessa struttura dei contenuti, articoli o pagine, non dipende dal modo in cui essi verranno presentati. Gli editor dovranno solo compilare tutti gli attributi necessari alla pubblicazione. Nel caso di un blog, ad esempio, i singoli post potranno avere un titolo, un testo, una data, un autore, delle immagini e così via.

Di CMS di questo tipo ne esistono veramente tanti. Giusto per citarne alcuni:

Pre-rendering

Ok, a questo punto abbiamo il contenuto, ma come facciamo a caricarlo su un sito web?

L'idea di Jamstack è quella di precompilare tutte le pagine del sito prima della loro pubblicazione online. Durante la compilazione i contenuti vengono letti dal CMS e inseriti all'interno del markup.

Il risultato finale sarà un sito completamente 'statico', senza parti potenzialmente attaccabili da parte di malintenzionati.

Anche in questo caso esistono diversi strumenti che permettono di compilare un sito statico. I più noti sicuramente sono:

Pubblicazione e distribuzione

Il risultato della compilazione non è altro che un insieme di file HTML, nessuna parte dinamica. Di fatto è una fotografia dei contenuti presenti sul CMS al momento della compilazione.

Possiamo pubblicare questi file dove preferiamo, anche su un qualsiasi server web cui abbiamo accesso, tuttavia un sito completamente statico è perfetto per essere immediatamente caricato su una CDN.

Anche le CDN abbondano, mi limito a citare quelle che offrono maggiori servizi a supporto di un'architettura Jamstack:

Javascript e API

A questo punto della storia però è normale chiedersi: 'tutto bello, ma come faccio con tutte le funzionalità che sono necessariamente dinamiche?'

Mi riferisco ovviamente a funzioni come form di contatto, form per l'iscrizione a newsletter, pagamenti, commenti e così via.

Attenzione però: il fatto che il sito sia statico non ci impedisce di utilizzare Javascript. Questo significa che possiamo tranquillamente interagire con qualsiasi backend, API o servizio esterno ci possa venire in mente per offrire una di queste funzionalità.

L'offerta in questo campo non manca. Oggi è veramente difficile trovare un servizio che non offra delle API per utilizzarlo.

CI/CD

Come detto in precedenza, le pagine caricate sulla CDN sono una fotografia statica dei contenuti e della struttura del sito.

Come facciamo quindi ad aggiornare il sito dopo la prima pubblicazione?

Tutte le CDN sopra citate permettono di integrarsi con un repository Git online, come Github o Gitlab. In questo, modo nel momento in cui lo sviluppatore responsabile della struttura del sito effettua un commit di una nuova versione, la CDN avvierà una compilazione del sito, aggiornando le pagine sulla CDN.

Allo stesso modo è possibile integrare il CMS, scatenando una compilazione nel momento in cui un nuovo contenuto viene pubblicato.

Vantaggi di Jamstack

Vediamo quindi quali sono i vantaggi di un'architettura del genere rispetto ad un approccio più tradizionale, come può essere quello di WordPress.

Sicurezza

Essendo un sito completamente statico di fatto è "in sola lettura", ovvero non esistono parti dinamiche che un malintenzionato possa cercare di colpire.

Come abbiamo visto, inoltre, il backend, ovvero il CMS, non è associato al sito.

Al contrario WordPress, per fare un esempio, oltre ad essere un'applicazione dinamica e quindi possibilmente soggetta a vulnerabilità, espone sul web sia il sito stesso che il CMS, per quanto protetto da login.

Questo non significa che WordPress non sia sicuro, ma solo che è necessario svolgere delle attività aggiuntive per evitare di incappare in problemi di sicurezza: bisogna quindi tenere costantemente aggiornato WordPress con tutti gli ultimi aggiornamenti, applicare una politica di sicurezza sulle password di accesso all'area riservata, proteggere il login da tentativi di attacco di tipo brute force, ecc.

Performance

Ogni singola volta che una pagina di WordPress viene visualizzata, il server web prende in carico la richiesta e la gira ad un'applicazione, WordPress appunto. WordPress a sua volta esegue decine di query su un database per recuperare, ad esempio, il contenuto della pagina, il titolo del sito, la lista delle pagine correlate, la lista dei commenti e tutto quello che serve per costruire dinamicamente la pagina HTML da mostrare sul browser dell'utente.

Questo si ripete per ogni singola visualizzazione di una pagina, anche della stessa pagina.

Il risultato è che il sito risulterà più lento a caricarsi. Peccato che, oggi, la velocità sia l'aspetto più importante per un sito web. Sia perché gli utenti tendono ad abbandonare un sito che non si carica velocemente, sia perché, cosa ancora più importante, Google predilige enormemente nei risultati di ricerca i siti più veloci.

Ovviamente è possibile ottimizzare questo processo in tanti modi, principalmente utilizzando meccanismi di caching a diversi livelli, dalle query fino alla singole pagine, ma di base funziona così.

Al contrario un sito statico non ha nessuno di questi problemi perché non c'è alcuna elaborazione da fare prima di servire il contenuto al client.

Scalabilità

Il fatto che un sito Jamstack sia pensato per essere caricato su una CDN, fa sì che fin dal primo giorno questo sia già scalabile ed ottimizzato per essere acceduto dagli utenti dal punto geograficamente più vicino a loro.

Ovviamente anche un sito dinamico, come uno realizzato con Wordpress, può essere servito tramite una CDN ma, per sua stessa natura, non sarà possibile servire dalla CDN il 100% delle richieste.

Manutenibilità e portabilità

Essendo statico, un sito Jamstack, una volta compilato, funziona e continuerà a funzionare a prescindere. Nessuna patch o aggiornamento del web server o di Wordpress di cui preoccuparsi.

Per lo stesso motivo, il sito può essere preso e spostato su qualsiasi altra piattaforma. Viene meno il concetto di "migrazione", un'attività che crea non pochi grattacapi dovuti a compatibilità delle versioni e a configurazioni.

Nel caso di Jamstack l'unico cambiamento che va fatto è il puntamento DNS.

Svantaggi di Jamstack

Ma quindi è tutto oro quel che luccica? Beh non proprio.

L'architettura proposta da Jamstack è complessa da padroneggiare e quindi ancora riservata agli addetti ai lavori, in particolare quando si tratta di integrare sistemi di terze parti.

La grandissima diffusione di WordPress, invece, è stata dovuta sia alla sua semplicità sia al vastissimo assortimento di risorse, quali template, temi e plugin, che lo ha reso uno strumento accessibile anche a chi non ha alcuna competenza specifica.


In definitiva: Jamstack è il futuro del Web?

Per me non c'è dubbio, la risposta è sì.

Ovviamente però ci vorrà del tempo. Prima che Jamstack arrivi ad essere "masticabile" anche dai non addetti ai lavori dovrà fare ancora parecchia strada.