Vai al contenuto
BeoHosting
BeoHosting
Technical

Cos'è il caching e quali sono i tipi di caching

BeoHosting Team··10 min read di lettura
Cos'è il caching e quali sono i tipi di caching

Cos'è il caching e perché è importante

Il caching è una tecnica che consiste nel memorizzare una copia dei dati in una posizione da cui possono essere recuperati più rapidamente, invece di rigenerarli o recuperarli dalla fonte originale ogni volta. Immagina il caching come fare una fotocopia di un documento che usi spesso, invece di andare in archivio a prendere l'originale ogni volta. Nel contesto dei siti web, il caching velocizza drasticamente il caricamento delle pagine, riduce il carico sul server e migliora l'esperienza utente. Senza il caching, ogni richiesta di pagina richiederebbe l'elaborazione del codice PHP, le query al database e la generazione dell'HTML da zero.

Il caching funziona secondo il principio della memorizzazione temporanea dei risultati di operazioni costose. Quando un utente visita una pagina per la prima volta, il server la genera completamente e salva il risultato nella cache. Ogni utente successivo riceve la versione memorizzata in cache, consegnata in una frazione del tempo. Una tipica pagina dinamica WordPress senza cache si carica in 2-5 secondi, mentre una versione in cache della stessa pagina può essere consegnata in 50-200 millisecondi, con un miglioramento da 10 a 100 volte.

Cache del browser

Come funziona la cache del browser

La cache del browser è la forma di caching più semplice e più vicina, che avviene direttamente sul dispositivo dell'utente. Quando visiti un sito, il browser scarica dal server HTML, CSS, JavaScript, immagini e font. La cache del browser memorizza questi file in locale, così alla visita successiva non deve scaricarli di nuovo dal server. Ecco perché alla seconda visita una pagina si carica molto più velocemente della prima volta.

Header HTTP della cache

Il server controlla la cache del browser tramite gli header HTTP che indicano al browser per quanto tempo conservare determinati file. L'header Cache-Control è il più importante e può contenere direttive come max-age, che definisce per quanti secondi il browser deve conservare il file, no-cache, che indica al browser di verificare con il server prima di usare la cache, no-store, che vieta completamente il caching, e public o private, che determinano se gli intermediari come i CDN possono memorizzare il contenuto.

L'header Expires è un modo più datato di impostare la cache, che definisce la data e l'ora esatte in cui la cache scade. L'header ETag è un identificatore di versione del file che il browser invia al server per verificare se il file è cambiato. Se non è cambiato, il server restituisce una risposta 304 Not Modified senza contenuto, risparmiando banda. L'header Last-Modified funziona in modo simile, ma usa la data dell'ultima modifica invece di un identificatore. In pratica, usa Cache-Control con max-age per le risorse statiche ed ETag per i contenuti dinamici.

Configurazione pratica

Per una cache del browser ottimale, imposta valori max-age elevati per le risorse statiche che cambiano raramente. I file CSS e JavaScript con nomi versionati come style.v2.css possono avere un max-age di un anno, perché quando il contenuto cambia tu modifichi il nome del file. Le immagini possono avere un max-age da 30 giorni a un anno, a seconda di quanto spesso le cambi. Le pagine HTML dovrebbero avere un max-age breve oppure no-cache, perché il contenuto cambia più spesso. In Apache usa la direttiva mod_expires nel file htaccess e in Nginx la direttiva expires nella configurazione.

Cache del server

Opcode caching

PHP è un linguaggio interpretato, il che significa che il codice PHP viene compilato in codice macchina a ogni caricamento di pagina. L'opcode caching elimina questa ripetizione memorizzando il codice macchina compilato in memoria. OPcache è un meccanismo integrato in PHP per l'opcode caching, presente a partire da PHP 5.5 e versioni successive. Quando OPcache è attivo, il codice PHP viene compilato una sola volta e ogni richiesta successiva usa il codice già compilato dalla memoria. Questo può velocizzare le applicazioni PHP da 2 a 5 volte senza alcuna modifica al codice.

Full page caching

Il full page caching o page cache memorizza l'intero output HTML di una pagina, così il codice PHP non viene affatto eseguito per le richieste in cache. È la forma di caching più efficace per WordPress e per i CMS simili, perché elimina tutta l'elaborazione PHP e le query al database. Il server consegna semplicemente un file HTML statico dalla cache. Nginx FastCGI cache e Apache mod_cache sono soluzioni a livello di server, mentre i plugin WordPress come WP Super Cache e W3 Total Cache implementano la page cache a livello applicativo.

Configurazione della cache del server

Su Nginx, la direttiva fastcgi_cache definisce una zona di cache in memoria, fastcgi_cache_valid imposta per quanto tempo la cache è valida per i diversi codici di stato HTTP e fastcgi_cache_key definisce la chiave con cui la cache viene identificata, di solito una combinazione di metodo della richiesta, host e URI. È importante configurare correttamente le eccezioni, in modo che le richieste POST, le pagine con cookie per gli utenti autenticati, le pagine di amministrazione e le pagine con parametri di query non vengano memorizzate in cache. Da BeoHosting i nostri server usano una configurazione Nginx ottimizzata con FastCGI cache per le massime prestazioni dei siti WordPress.

Cache degli oggetti

Cos'è la cache degli oggetti

La cache degli oggetti memorizza i risultati delle query al database e di altre operazioni costose in un veloce database in memoria, invece di eseguire nuovamente queste query a ogni caricamento di pagina. WordPress dispone di un meccanismo integrato di cache degli oggetti, ma per impostazione predefinita conserva i dati solo durante una singola richiesta. Con una soluzione di cache degli oggetti persistente come Redis o Memcached, gli oggetti memorizzati restano in memoria tra una richiesta e l'altra, riducendo drasticamente il numero di query al database.

Redis come cache degli oggetti

Redis è un database in memoria che archivia i dati nella RAM con un'archiviazione su disco persistente opzionale. Per WordPress, il plugin Redis Object Cache collega l'API della cache degli oggetti di WordPress con un server Redis. Un tipico sito WordPress esegue da 50 a 200 query al database per pagina. Con una cache degli oggetti Redis, la maggior parte di queste query viene eliminata perché i risultati vengono letti dalla memoria, centinaia di volte più veloce del disco. Redis supporta varie strutture dati, tra cui stringhe, hash, liste, set e set ordinati, rendendolo estremamente flessibile.

L'alternativa Memcached

Memcached è un'altra soluzione popolare di cache degli oggetti, più semplice di Redis ma sufficiente per la maggior parte dei siti WordPress. Memcached archivia i dati esclusivamente in memoria, senza archiviazione persistente, il che significa che tutti i dati in cache vengono persi al riavvio del server. Il vantaggio di Memcached è il minor consumo di memoria per chiave e prestazioni molto stabili sotto carico elevato. Per la maggior parte dei siti, la scelta tra Redis e Memcached non comporta una differenza di prestazioni percepibile.

Page caching per i CMS

Plugin di caching per WordPress

L'ecosistema WordPress offre molti plugin per il page caching, con funzionalità e complessità diverse. WP Super Cache è il plugin gratuito più popolare, che genera file HTML statici e li serve direttamente senza elaborazione PHP. W3 Total Cache è una soluzione più completa, che combina page cache, cache del browser, cache degli oggetti e integrazione CDN, ma è più complessa da configurare. WP Rocket è un plugin premium che offre un ottimo equilibrio tra prestazioni e semplicità, con configurazione automatica e ottimizzazioni avanzate.

Invalidazione della cache

La sfida più grande del caching è l'invalidazione: come e quando eliminare la cache obsoleta. Se pubblichi un nuovo articolo del blog ma la cache mostra la vecchia versione della homepage, i visitatori non vedranno il nuovo contenuto. I buoni plugin di cache eliminano automaticamente i file di cache pertinenti quando il contenuto cambia. Ad esempio, quando pubblichi un nuovo articolo, dovresti eliminare la cache della homepage, la cache della pagina di categoria a cui appartiene l'articolo, le pagine archivio per data e la sitemap. Lo svuotamento manuale completo della cache andrebbe evitato, perché provoca un calo temporaneo delle prestazioni mentre la cache si ricostruisce.

Cache CDN

Come funziona un CDN

Un Content Delivery Network o CDN è una rete di server distribuiti in tutto il mondo che memorizza copie del tuo sito e consegna i contenuti dal server geograficamente più vicino al visitatore. Quando un visitatore da Tokyo accede al tuo sito ospitato a Belgrado, senza un CDN la richiesta attraversa l'oceano aggiungendo da 200 a 300 millisecondi di latenza. Con un CDN, il contenuto viene consegnato dal server CDN di Tokyo o di una regione vicina, con una latenza di soli 10-30 millisecondi.

Servizi CDN popolari

Il servizio CDN Cloudflare è il CDN più popolare, con un piano gratuito che include CDN, protezione DDoS, certificato SSL e ottimizzazioni di base. Cloudflare ha oltre 300 data center in tutto il mondo, comprese sedi regionali come Milano e Roma. BunnyCDN è un'alternativa economica con pagamento a consumo e prestazioni eccellenti. AWS CloudFront, Google Cloud CDN e Azure CDN sono soluzioni enterprise integrate con le piattaforme cloud. Per i siti WordPress, Cloudflare è il più semplice da configurare, con un plugin WordPress dedicato che svuota automaticamente la cache quando il contenuto viene pubblicato.

Edge caching

I CDN moderni offrono funzionalità di edge computing in cui la logica applicativa viene eseguita sui server CDN invece che sul server di origine. Cloudflare Workers, Vercel Edge Functions e AWS Lambda@Edge consentono di eseguire codice nelle posizioni edge per la personalizzazione dei contenuti, l'A/B testing, i redirect e l'autenticazione senza comunicare con il server di origine. L'edge caching combinato con l'edge computing può consegnare pagine completamente personalizzate alla velocità di un CDN, un cambiamento rivoluzionario nelle prestazioni web.

Strategie di caching

Pattern cache-aside

Cache-aside o lazy loading è il pattern di caching più comune, in cui l'applicazione controlla prima nella cache i dati richiesti. Se i dati esistono nella cache, si parla di cache hit e vengono restituiti immediatamente. Se non esistono, si parla di cache miss e l'applicazione recupera i dati dal database, li memorizza nella cache e poi li restituisce all'utente. Questo pattern è semplice da implementare e funziona bene per le applicazioni a forte intensità di lettura, in cui i dati vengono letti molto più spesso di quanto cambino.

Write-through e write-behind

Il pattern write-through scrive i dati simultaneamente nella cache e nel database, garantendo che la cache sia sempre aggiornata ma aumentando la latenza di scrittura. Il pattern write-behind o write-back scrive i dati prima nella cache e in modo asincrono nel database, riducendo la latenza di scrittura ma creando il rischio di perdita di dati se il server si blocca prima che i dati vengano scritti nel database. Per la maggior parte delle applicazioni web, cache-aside con un'invalidazione intelligente è la scelta migliore, perché bilancia prestazioni e coerenza.

Conclusione

Il caching è una tecnica fondamentale per le prestazioni di un sito che opera su più livelli, dal browser al CDN. La cache del browser elimina i download non necessari delle risorse statiche, la cache del server velocizza la generazione delle pagine dinamiche, la cache degli oggetti riduce il carico sul database, la page cache elimina l'elaborazione PHP e la cache CDN avvicina i contenuti agli utenti di tutto il mondo. La combinazione di queste tecniche può velocizzare il tuo sito da 10 a 100 volte e migliorare significativamente l'esperienza utente. Da BeoHosting offriamo hosting ottimizzato per le prestazioni con OPcache, cache degli oggetti Redis e supporto all'integrazione CDN. Verifica la velocità del tuo sito.

BeoHosting Team

10+ anni di esperienza — Specialisti di web hosting e infrastrutture

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Ultimo aggiornamento: