{"id":167100,"date":"2025-08-04T09:00:00","date_gmt":"2025-08-04T09:00:00","guid":{"rendered":"https:\/\/gtechgroup.it\/blog\/litespeed-cache-esi-edge-side-includes-dinamica\/"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T22:00:00","slug":"litespeed-cache-esi-edge-side-includes-dinamica","status":"publish","type":"post","link":"https:\/\/gtechgroup.it\/blog\/litespeed-cache-esi-edge-side-includes-dinamica\/","title":{"rendered":"LiteSpeed Cache: ESI (Edge Side Includes) e Cache Dinamica"},"content":{"rendered":"<h2>LiteSpeed Cache: ESI (Edge Side Includes) e Cache Dinamica<\/h2>\n<p>Una delle sfide pi&#249; complesse del caching web &#232; 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&#249; elegante: ESI, ovvero Edge Side Includes.<\/p>\n<p>ESI permette di cachare una pagina con dei &#8220;buchi&#8221; (hole-punching) che vengono riempiti con contenuto dinamico in tempo reale. &#200; come avere una pagina cachata con post-it vuoti che vengono compilati al volo per ogni visitatore. Questa tecnica &#232; esclusiva di LiteSpeed Cache su server LiteSpeed e rappresenta un vantaggio competitivo enorme rispetto a qualsiasi altro plugin di cache.<\/p>\n<h3>Il Problema della Cache con Contenuto Dinamico<\/h3>\n<p>Consideriamo una tipica pagina WordPress. La maggior parte del contenuto &#232; identica per tutti i visitatori: l&#8217;articolo, le immagini, la sidebar con i post recenti, il footer. Tuttavia, ci sono elementi che cambiano per ogni utente:<\/p>\n<ul>\n<li>Il messaggio &#8220;Ciao, Mario&#8221; nella barra di navigazione<\/li>\n<li>Il conteggio degli articoli nel carrello WooCommerce<\/li>\n<li>I commenti in attesa di moderazione (per gli amministratori)<\/li>\n<li>I contenuti personalizzati basati sulla cronologia dell&#8217;utente<\/li>\n<li>I banner pubblicitari targetizzati<\/li>\n<\/ul>\n<p>Senza ESI, queste pagine non possono essere cachate per gli utenti loggati, perch&#233; cachare la versione di un utente significherebbe mostrare le sue informazioni personali a tutti gli altri. Il risultato &#232; che gli utenti loggati sperimentano sempre tempi di caricamento pi&#249; lunghi.<\/p>\n<p>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.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/ls-01-dashboard.png\" alt=\"Dashboard LiteSpeed Cache con ESI attivo\" \/><\/p>\n<h3>Come Funziona ESI Tecnicamente<\/h3>\n<p>ESI &#232; uno standard W3C (non un&#8217;invenzione di LiteSpeed) originariamente sviluppato per le CDN. Il concetto &#232; semplice:<\/p>\n<ol>\n<li>Il server genera la pagina completa e la memorizza in cache<\/li>\n<li>Al posto dei frammenti dinamici, inserisce tag ESI speciali: <code>&lt;esi:include src=&quot;\/esi\/cart-widget\/&quot; \/&gt;<\/code><\/li>\n<li>Quando la pagina viene richiesta, il server serve la versione cachata<\/li>\n<li>Per ogni tag ESI, il server genera il frammento dinamico e lo inserisce al posto del tag<\/li>\n<li>L&#8217;utente riceve una pagina completa, senza accorgersi della composizione<\/li>\n<\/ol>\n<p>Il punto chiave &#232; che la generazione dei frammenti ESI &#232; molto pi&#249; veloce della generazione dell&#8217;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.<\/p>\n<p>Inoltre, i frammenti ESI possono essere cachati individualmente. Il widget del carrello di un utente specifico pu&#242; 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.<\/p>\n<h3>ESI in LiteSpeed Cache: Configurazione<\/h3>\n<p>Per configurare ESI in LiteSpeed Cache, vai su <strong>LiteSpeed Cache &gt; Cache &gt; ESI<\/strong>.<\/p>\n<p><strong>Enable ESI<\/strong>: imposta su &#8220;On&#8221; per attivare il supporto ESI. Questa opzione &#232; disponibile solo se il tuo server &#232; LiteSpeed. Su Apache o Nginx, l&#8217;opzione non sar&#224; presente.<\/p>\n<p><strong>Cache Admin Bar<\/strong>: imposta su &#8220;On&#8221;. 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.<\/p>\n<p><strong>Cache Comment Form<\/strong>: imposta su &#8220;On&#8221;. 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 &#232; servito dalla cache.<\/p>\n<p><strong>ESI Nonce<\/strong>: LiteSpeed Cache pu&#242; 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.<\/p>\n<h3>ESI per Widget Specifici<\/h3>\n<p>Oltre alle opzioni predefinite, puoi configurare qualsiasi widget WordPress come blocco ESI. Questo &#232; particolarmente utile per:<\/p>\n<p><strong>Widget del carrello WooCommerce<\/strong>: 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 &#232; servita dalla cache.<\/p>\n<p><strong>Widget &#8220;Recentemente visualizzati&#8221;<\/strong>: mostra prodotti diversi per ogni utente. ESI permette di cachare la pagina prodotto e generare solo questo widget dinamicamente.<\/p>\n<p><strong>Widget di login\/registrazione<\/strong>: mostra il form di login per i visitatori anonimi e il nome utente per quelli loggati.<\/p>\n<p><strong>Widget di notifiche<\/strong>: notifiche personalizzate per utente (ordini, messaggi, avvisi).<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/wc-02-dashboard-new.png\" alt=\"Widget WooCommerce con ESI in LiteSpeed Cache\" \/><\/p>\n<h3>Cache Privata vs ESI: Quando Usare Quale<\/h3>\n<p>LiteSpeed Cache offre due soluzioni per il contenuto personalizzato: la cache privata e l&#8217;ESI. &#200; importante capire quando usare l&#8217;una o l&#8217;altra:<\/p>\n<p><strong>Cache Privata<\/strong>: crea una copia completa della pagina per ogni utente. Ogni utente ha la sua versione cachata dell&#8217;intera pagina. Questo approccio consuma pi&#249; memoria (una copia per utente) ma &#232; pi&#249; semplice da configurare.<\/p>\n<p>Usa la cache privata quando:<\/p>\n<ul>\n<li>La maggior parte della pagina &#232; diversa per ogni utente<\/li>\n<li>Hai pochi utenti loggati<\/li>\n<li>Non vuoi complicare la configurazione<\/li>\n<\/ul>\n<p><strong>ESI<\/strong>: crea una copia pubblica della pagina con frammenti privati. Una sola copia della pagina pi&#249; piccoli frammenti per utente. Consuma molto meno memoria ed &#232; pi&#249; efficiente.<\/p>\n<p>Usa ESI quando:<\/p>\n<ul>\n<li>La maggior parte della pagina &#232; identica per tutti gli utenti<\/li>\n<li>Solo piccoli frammenti sono personalizzati (carrello, nome utente, notifiche)<\/li>\n<li>Hai molti utenti loggati<\/li>\n<li>Vuoi le massime prestazioni<\/li>\n<\/ul>\n<h3>ESI e WooCommerce: La Combinazione Perfetta<\/h3>\n<p>WooCommerce &#232; il caso d&#8217;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&#224; personalizzata per abbonati.<\/p>\n<p>Con ESI, puoi:<\/p>\n<ol>\n<li>Cachare le pagine prodotto per tutti i visitatori (inclusi quelli loggati)<\/li>\n<li>Rendere dinamico solo il mini-carrello tramite ESI<\/li>\n<li>Rendere dinamici i prezzi personalizzati (se usi pricing per ruolo) tramite ESI<\/li>\n<li>Mantenere i nonce aggiornati per il form &#8220;Aggiungi al carrello&#8221; tramite ESI<\/li>\n<\/ol>\n<p>Il risultato &#232; 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&#8217;impatto sulle prestazioni &#232; straordinario.<\/p>\n<h3>Sviluppo Personalizzato con ESI<\/h3>\n<p>Per gli sviluppatori, LiteSpeed Cache offre API per creare blocchi ESI personalizzati nel codice del tema o dei plugin:<\/p>\n<pre><code>\/\/ Registrare un blocco ESI\nadd_action(litespeed_tpl_normal, function() {\n    \/\/ Questo contenuto viene cachato normalmente\n    echo &lt;div class=\"pagina\"&gt;;\n    echo   &lt;h1&gt;Contenuto Statico&lt;\/h1&gt;;\n\n    \/\/ Questo blocco viene gestito come ESI\n    do_action(litespeed_esi_load, mio-widget-dinamico);\n\n    echo &lt;\/div&gt;;\n});\n\n\/\/ Definire il callback per il blocco ESI\nadd_action(litespeed_esi_load-mio-widget-dinamico, function() {\n    \/\/ Questo codice viene eseguito per ogni richiesta\n    echo Benvenuto,  . wp_get_current_user()-&gt;display_name;\n});<\/code><\/pre>\n<p>Questo permette un controllo totale su quali parti della pagina sono cachate e quali sono dinamiche, senza dover escludere l&#8217;intera pagina dalla cache.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/wc-06-settings.png\" alt=\"Configurazione ESI per WooCommerce\" \/><\/p>\n<h3>Cache Dinamica con Vary e Gruppi<\/h3>\n<p>Oltre a ESI, LiteSpeed Cache offre un&#8217;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&#224; dell&#8217;ESI.<\/p>\n<p>Ad esempio, puoi creare gruppi per:<\/p>\n<ul>\n<li><strong>Ruoli WordPress<\/strong>: una versione cache per subscriber, una per customer, una per editor<\/li>\n<li><strong>Lingua<\/strong>: una versione per ogni lingua del sito<\/li>\n<li><strong>Valuta<\/strong>: una versione per ogni valuta (utile per e-commerce internazionali)<\/li>\n<li><strong>Localit&#224; geografica<\/strong>: una versione per ogni paese o regione<\/li>\n<\/ul>\n<p>I gruppi sono meno granulari dell&#8217;ESI (tutti gli utenti dello stesso gruppo vedono la stessa pagina), ma sono pi&#249; semplici da configurare e pi&#249; efficienti in termini di memoria quando i gruppi sono pochi.<\/p>\n<h3>AJAX come Alternativa a ESI<\/h3>\n<p>Un&#8217;alternativa comune a ESI &#232; l&#8217;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.<\/p>\n<p>Questo approccio funziona su qualsiasi server (non richiede LiteSpeed) e &#232; utilizzato da molti plugin WooCommerce per aggiornare il carrello. Tuttavia, ha degli svantaggi:<\/p>\n<ul>\n<li>Il contenuto dinamico appare con un ritardo visibile (flash)<\/li>\n<li>Ogni richiesta AJAX &#232; una connessione HTTP aggiuntiva<\/li>\n<li>Le richieste AJAX passano attraverso WordPress (admin-ajax.php o REST API), generando carico sul server<\/li>\n<li>Non funziona con JavaScript disabilitato<\/li>\n<\/ul>\n<p>ESI &#232; superiore perch&#233; la composizione avviene a livello server: il client riceve una pagina gi&#224; completa, senza flash e senza richieste aggiuntive.<\/p>\n<h3>Limitazioni di ESI<\/h3>\n<p>ESI non &#232; una soluzione universale. Ha alcune limitazioni importanti:<\/p>\n<p><strong>Richiede LiteSpeed Server<\/strong>: ESI funziona solo su server LiteSpeed. Su Apache o Nginx, non &#232; disponibile.<\/p>\n<p><strong>Complessit&#224; aggiuntiva<\/strong>: ogni blocco ESI aggiunge una micro-richiesta al server. Con molti blocchi ESI, l&#8217;overhead pu&#242; annullare i benefici.<\/p>\n<p><strong>Debug pi&#249; difficile<\/strong>: i problemi con ESI possono essere pi&#249; difficili da diagnosticare rispetto al caching tradizionale.<\/p>\n<p><strong>Non tutti i widget sono compatibili<\/strong>: alcuni widget WordPress utilizzano JavaScript per il rendering e non possono essere gestiti come blocchi ESI server-side.<\/p>\n<h3>Best Practice per ESI<\/h3>\n<p><strong>Usa ESI con moderazione<\/strong>: non trasformare ogni elemento della pagina in un blocco ESI. Identifica solo i 2-3 elementi veramente dinamici e rendi quelli ESI.<\/p>\n<p><strong>Cacha anche i frammenti ESI<\/strong>: i frammenti ESI possono (e dovrebbero) avere la loro cache. Un frammento del carrello con TTL di 5 minuti &#232; molto pi&#249; efficiente di un frammento generato ogni volta.<\/p>\n<p><strong>Testa accuratamente<\/strong>: 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 &#8220;fughe&#8221; di dati tra utenti.<\/p>\n<p><strong>Monitora le prestazioni<\/strong>: confronta i tempi di caricamento con e senza ESI. In rari casi, l&#8217;overhead di ESI pu&#242; essere superiore al beneficio, specialmente con pochi utenti loggati.<\/p>\n<h3>Conclusione<\/h3>\n<p>ESI &#232; una delle funzionalit&#224; pi&#249; 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 &#8212; qualcosa che nessun altro plugin di cache pu&#242; offrire su WordPress. Se il tuo sito ha bisogno di combinare velocit&#224; e personalizzazione, ESI &#232; la risposta.<\/p>\n<div style=\"background:#f0f4f8;border-left:4px solid #0073aa;padding:20px;margin:30px 0;\">\n<h4>Serie Completa: LiteSpeed Cache per WordPress<\/h4>\n<ul>\n<li><a href=\"\/blog\/come-installare-configurare-litespeed-cache-wordpress\/\">Installazione e Configurazione<\/a><\/li>\n<li><a href=\"\/blog\/litespeed-cache-configurazione-cache-massima-velocita\/\">Configurazione Cache<\/a><\/li>\n<li><a href=\"\/blog\/ottimizzazione-css-javascript-litespeed-cache\/\">Ottimizzazione CSS e JavaScript<\/a><\/li>\n<li><a href=\"\/blog\/litespeed-cache-ottimizzazione-immagini-webp\/\">Ottimizzazione Immagini e WebP<\/a><\/li>\n<li><a href=\"\/blog\/lazy-load-placeholder-litespeed-cache\/\">Lazy Load e Placeholder<\/a><\/li>\n<li><a href=\"\/blog\/litespeed-cache-cdn-quic-cloud-configurazione\/\">CDN e QUIC.cloud<\/a><\/li>\n<li><a href=\"\/blog\/litespeed-cache-woocommerce-configurazione-ecommerce\/\">LiteSpeed Cache e WooCommerce<\/a><\/li>\n<li><a href=\"\/blog\/page-optimization-litespeed-cache-critical-css-prefetch\/\">Critical CSS e Prefetch<\/a><\/li>\n<li><a href=\"\/blog\/litespeed-cache-ottimizzazione-database-object-cache\/\">Database e Object Cache<\/a><\/li>\n<li><a href=\"\/blog\/litespeed-cache-esclusioni-regole-avanzate-cache-crawler\/\">Esclusioni e Cache Crawler<\/a><\/li>\n<li><a href=\"\/blog\/litespeed-cache-vs-wp-rocket-vs-w3-total-cache-confronto\/\">LiteSpeed vs WP Rocket vs W3TC<\/a><\/li>\n<li><a href=\"\/blog\/litespeed-server-vs-apache-vs-nginx\/\">LiteSpeed vs Apache vs Nginx<\/a><\/li>\n<li><strong>&#8594; ESI (Edge Side Includes) e Cache Dinamica<\/strong><\/li>\n<li><a href=\"\/blog\/pagespeed-100-litespeed-cache-guida-pratica\/\">PageSpeed a 100<\/a><\/li>\n<li><a href=\"\/blog\/risolvere-problemi-litespeed-cache-troubleshooting\/\">Troubleshooting<\/a><\/li>\n<\/ul>\n<\/div>\n<p>ESI e cache dinamica sono funzionalit&#224; avanzate che richiedono competenze specialistiche per la corretta implementazione. <a href=\"https:\/\/gtechgroup.it\/\">G Tech Group<\/a> configura ESI e LiteSpeed Cache in modo professionale per e-commerce e siti con utenti registrati. Scopri il nostro <a href=\"https:\/\/gtechgroup.it\/hosting-wordpress\/\">hosting WordPress con LiteSpeed<\/a> o <a href=\"https:\/\/gtechgroup.it\/contatti\/\">contattaci<\/a> per una configurazione personalizzata.<\/p>\n<h3>Migliora il Tuo Sito WordPress<\/h3>\n<p>Scopri le nostre guide complete sugli altri plugin essenziali per WordPress:<\/p>\n<ul>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/come-installare-elementor-wordpress-guida-principianti\/\">Come Installare Elementor su WordPress<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/wp-rocket-installare-configurare-wordpress\/\">Come Installare e Configurare WP Rocket<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/come-installare-configurare-seopress-wordpress-guida\/\">Come Installare e Configurare SEOPress<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/installare-attivare-updraftplus-wordpress\/\">Come Installare e Configurare UpdraftPlus<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>LiteSpeed Cache: ESI (Edge Side Includes) e Cache Dinamica Una delle sfide pi&#249; complesse del caching web &#232; la gestione delle pagine che contengono sia&hellip;<\/p>\n","protected":false},"author":0,"featured_media":167026,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"LiteSpeed Cache ESI e Cache Dinamica | Guida","_seopress_titles_desc":"Come usare ESI in LiteSpeed Cache per contenuti dinamici in pagine cachate. Widget, login, carrello e sidebar.","_seopress_robots_index":"","footnotes":""},"categories":[1],"tags":[3505,3504,3503,3486],"class_list":["post-167100","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-senza-categoria","tag-cache-dinamica","tag-edge-side-includes","tag-esi","tag-litespeed-cache"],"_links":{"self":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/167100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/comments?post=167100"}],"version-history":[{"count":0,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/167100\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media\/167026"}],"wp:attachment":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media?parent=167100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/categories?post=167100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/tags?post=167100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}