LiteSpeed Cache: ESI (Edge Side Includes) e Cache Dinamica
Una delle sfide più complesse del caching web è la gestione delle pagine che contengono sia contenuto statico (uguale per tutti i visitatori) che contenuto dinamico (personalizzato per ogni utente). La maggior parte dei plugin di cache risolve questo problema con un approccio binario: o la pagina viene cachata completamente, o non viene cachata affatto. LiteSpeed Cache offre una soluzione molto più elegante: ESI, ovvero Edge Side Includes.
ESI permette di cachare una pagina con dei “buchi” (hole-punching) che vengono riempiti con contenuto dinamico in tempo reale. È come avere una pagina cachata con post-it vuoti che vengono compilati al volo per ogni visitatore. Questa tecnica è esclusiva di LiteSpeed Cache su server LiteSpeed e rappresenta un vantaggio competitivo enorme rispetto a qualsiasi altro plugin di cache.
Il Problema della Cache con Contenuto Dinamico
Consideriamo una tipica pagina WordPress. La maggior parte del contenuto è identica per tutti i visitatori: l’articolo, le immagini, la sidebar con i post recenti, il footer. Tuttavia, ci sono elementi che cambiano per ogni utente:
- Il messaggio “Ciao, Mario” nella barra di navigazione
- Il conteggio degli articoli nel carrello WooCommerce
- I commenti in attesa di moderazione (per gli amministratori)
- I contenuti personalizzati basati sulla cronologia dell’utente
- I banner pubblicitari targetizzati
Senza ESI, queste pagine non possono essere cachate per gli utenti loggati, perché cachare la versione di un utente significherebbe mostrare le sue informazioni personali a tutti gli altri. Il risultato è che gli utenti loggati sperimentano sempre tempi di caricamento più lunghi.
Con ESI, il 95% della pagina viene servito dalla cache (in millisecondi), e solo i piccoli frammenti dinamici vengono generati in tempo reale. Il tempo di caricamento per gli utenti loggati diventa quasi identico a quello degli utenti anonimi.

Come Funziona ESI Tecnicamente
ESI è uno standard W3C (non un’invenzione di LiteSpeed) originariamente sviluppato per le CDN. Il concetto è semplice:
- Il server genera la pagina completa e la memorizza in cache
- Al posto dei frammenti dinamici, inserisce tag ESI speciali:
<esi:include src="/esi/cart-widget/" /> - Quando la pagina viene richiesta, il server serve la versione cachata
- Per ogni tag ESI, il server genera il frammento dinamico e lo inserisce al posto del tag
- L’utente riceve una pagina completa, senza accorgersi della composizione
Il punto chiave è che la generazione dei frammenti ESI è molto più veloce della generazione dell’intera pagina. Un frammento ESI tipico (come il widget del carrello) richiede 5-10ms per essere generato, contro i 200-500ms di una pagina completa.
Inoltre, i frammenti ESI possono essere cachati individualmente. Il widget del carrello di un utente specifico può essere cachato con un TTL breve (5 minuti), mentre la pagina principale ha un TTL lungo (7 giorni). Ogni componente ha il proprio ciclo di vita della cache.
ESI in LiteSpeed Cache: Configurazione
Per configurare ESI in LiteSpeed Cache, vai su LiteSpeed Cache > Cache > ESI.
Enable ESI: imposta su “On” per attivare il supporto ESI. Questa opzione è disponibile solo se il tuo server è LiteSpeed. Su Apache o Nginx, l’opzione non sarà presente.
Cache Admin Bar: imposta su “On”. Questa opzione utilizza ESI per gestire la barra di amministrazione di WordPress. La pagina viene cachata normalmente, e la barra admin viene inserita come frammento ESI solo per gli utenti loggati con i permessi appropriati.
Cache Comment Form: imposta su “On”. Il modulo dei commenti contiene un nonce (token di sicurezza) che cambia per ogni utente e sessione. Con ESI, il modulo viene generato dinamicamente mentre il resto della pagina è servito dalla cache.
ESI Nonce: LiteSpeed Cache può gestire i nonce di WordPress tramite ESI. I nonce sono token di sicurezza utilizzati da WordPress e WooCommerce per prevenire attacchi CSRF. Senza ESI, la presenza di nonce impedisce il caching efficace delle pagine.
ESI per Widget Specifici
Oltre alle opzioni predefinite, puoi configurare qualsiasi widget WordPress come blocco ESI. Questo è particolarmente utile per:
Widget del carrello WooCommerce: il mini-carrello nel menu mostra il numero di articoli e il totale, dati unici per ogni utente. Con ESI, il widget viene generato dinamicamente mentre la pagina del negozio è servita dalla cache.
Widget “Recentemente visualizzati”: mostra prodotti diversi per ogni utente. ESI permette di cachare la pagina prodotto e generare solo questo widget dinamicamente.
Widget di login/registrazione: mostra il form di login per i visitatori anonimi e il nome utente per quelli loggati.
Widget di notifiche: notifiche personalizzate per utente (ordini, messaggi, avvisi).

Cache Privata vs ESI: Quando Usare Quale
LiteSpeed Cache offre due soluzioni per il contenuto personalizzato: la cache privata e l’ESI. È importante capire quando usare l’una o l’altra:
Cache Privata: crea una copia completa della pagina per ogni utente. Ogni utente ha la sua versione cachata dell’intera pagina. Questo approccio consuma più memoria (una copia per utente) ma è più semplice da configurare.
Usa la cache privata quando:
- La maggior parte della pagina è diversa per ogni utente
- Hai pochi utenti loggati
- Non vuoi complicare la configurazione
ESI: crea una copia pubblica della pagina con frammenti privati. Una sola copia della pagina più piccoli frammenti per utente. Consuma molto meno memoria ed è più efficiente.
Usa ESI quando:
- La maggior parte della pagina è identica per tutti gli utenti
- Solo piccoli frammenti sono personalizzati (carrello, nome utente, notifiche)
- Hai molti utenti loggati
- Vuoi le massime prestazioni
ESI e WooCommerce: La Combinazione Perfetta
WooCommerce è il caso d’uso perfetto per ESI. Le pagine prodotto e le pagine di categoria sono identiche per tutti i visitatori, ma contengono elementi dinamici: il mini-carrello, il pulsante wishlist, la disponibilità personalizzata per abbonati.
Con ESI, puoi:
- Cachare le pagine prodotto per tutti i visitatori (inclusi quelli loggati)
- Rendere dinamico solo il mini-carrello tramite ESI
- Rendere dinamici i prezzi personalizzati (se usi pricing per ruolo) tramite ESI
- Mantenere i nonce aggiornati per il form “Aggiungi al carrello” tramite ESI
Il risultato è un e-commerce dove tutte le pagine vengono servite dalla cache in millisecondi, indipendentemente dal fatto che il visitatore sia loggato o meno. Per un sito WooCommerce con molti utenti registrati, l’impatto sulle prestazioni è straordinario.
Sviluppo Personalizzato con ESI
Per gli sviluppatori, LiteSpeed Cache offre API per creare blocchi ESI personalizzati nel codice del tema o dei plugin:
// Registrare un blocco ESI
add_action(litespeed_tpl_normal, function() {
// Questo contenuto viene cachato normalmente
echo <div class="pagina">;
echo <h1>Contenuto Statico</h1>;
// Questo blocco viene gestito come ESI
do_action(litespeed_esi_load, mio-widget-dinamico);
echo </div>;
});
// Definire il callback per il blocco ESI
add_action(litespeed_esi_load-mio-widget-dinamico, function() {
// Questo codice viene eseguito per ogni richiesta
echo Benvenuto, . wp_get_current_user()->display_name;
});
Questo permette un controllo totale su quali parti della pagina sono cachate e quali sono dinamiche, senza dover escludere l’intera pagina dalla cache.

Cache Dinamica con Vary e Gruppi
Oltre a ESI, LiteSpeed Cache offre un’altra tecnica per la cache dinamica: i gruppi di variazione (Vary Groups). Questa tecnica crea versioni diverse della cache per gruppi di utenti diversi, senza la complessità dell’ESI.
Ad esempio, puoi creare gruppi per:
- Ruoli WordPress: una versione cache per subscriber, una per customer, una per editor
- Lingua: una versione per ogni lingua del sito
- Valuta: una versione per ogni valuta (utile per e-commerce internazionali)
- Località geografica: una versione per ogni paese o regione
I gruppi sono meno granulari dell’ESI (tutti gli utenti dello stesso gruppo vedono la stessa pagina), ma sono più semplici da configurare e più efficienti in termini di memoria quando i gruppi sono pochi.
AJAX come Alternativa a ESI
Un’alternativa comune a ESI è l’uso di AJAX per caricare i contenuti dinamici lato client. Invece di comporre la pagina sul server, la pagina cachata contiene placeholder che vengono riempiti da richieste AJAX dopo il caricamento.
Questo approccio funziona su qualsiasi server (non richiede LiteSpeed) e è utilizzato da molti plugin WooCommerce per aggiornare il carrello. Tuttavia, ha degli svantaggi:
- Il contenuto dinamico appare con un ritardo visibile (flash)
- Ogni richiesta AJAX è una connessione HTTP aggiuntiva
- Le richieste AJAX passano attraverso WordPress (admin-ajax.php o REST API), generando carico sul server
- Non funziona con JavaScript disabilitato
ESI è superiore perché la composizione avviene a livello server: il client riceve una pagina già completa, senza flash e senza richieste aggiuntive.
Limitazioni di ESI
ESI non è una soluzione universale. Ha alcune limitazioni importanti:
Richiede LiteSpeed Server: ESI funziona solo su server LiteSpeed. Su Apache o Nginx, non è disponibile.
Complessità aggiuntiva: ogni blocco ESI aggiunge una micro-richiesta al server. Con molti blocchi ESI, l’overhead può annullare i benefici.
Debug più difficile: i problemi con ESI possono essere più difficili da diagnosticare rispetto al caching tradizionale.
Non tutti i widget sono compatibili: alcuni widget WordPress utilizzano JavaScript per il rendering e non possono essere gestiti come blocchi ESI server-side.
Best Practice per ESI
Usa ESI con moderazione: non trasformare ogni elemento della pagina in un blocco ESI. Identifica solo i 2-3 elementi veramente dinamici e rendi quelli ESI.
Cacha anche i frammenti ESI: i frammenti ESI possono (e dovrebbero) avere la loro cache. Un frammento del carrello con TTL di 5 minuti è molto più efficiente di un frammento generato ogni volta.
Testa accuratamente: con ESI attivo, testa il sito come utente anonimo E come utente loggato. Verifica che i contenuti personalizzati siano corretti e che non ci siano “fughe” di dati tra utenti.
Monitora le prestazioni: confronta i tempi di caricamento con e senza ESI. In rari casi, l’overhead di ESI può essere superiore al beneficio, specialmente con pochi utenti loggati.
Conclusione
ESI è una delle funzionalità più potenti e meno conosciute di LiteSpeed Cache. Per siti con utenti loggati, e-commerce e community, ESI permette di ottenere prestazioni di cache anche per pagine con contenuto personalizzato — qualcosa che nessun altro plugin di cache può offrire su WordPress. Se il tuo sito ha bisogno di combinare velocità e personalizzazione, ESI è la risposta.
Serie Completa: LiteSpeed Cache per WordPress
- Installazione e Configurazione
- Configurazione Cache
- Ottimizzazione CSS e JavaScript
- Ottimizzazione Immagini e WebP
- Lazy Load e Placeholder
- CDN e QUIC.cloud
- LiteSpeed Cache e WooCommerce
- Critical CSS e Prefetch
- Database e Object Cache
- Esclusioni e Cache Crawler
- LiteSpeed vs WP Rocket vs W3TC
- LiteSpeed vs Apache vs Nginx
- → ESI (Edge Side Includes) e Cache Dinamica
- PageSpeed a 100
- Troubleshooting
ESI e cache dinamica sono funzionalità avanzate che richiedono competenze specialistiche per la corretta implementazione. G Tech Group configura ESI e LiteSpeed Cache in modo professionale per e-commerce e siti con utenti registrati. Scopri il nostro hosting WordPress con LiteSpeed o contattaci per una configurazione personalizzata.
Migliora il Tuo Sito WordPress
Scopri le nostre guide complete sugli altri plugin essenziali per WordPress: