Caching
Modulo 6: Velocità · Tempo di lettura: 9 minuti
Obiettivo della lezione: Dopo questa lezione saprà spiegare quali tipi di cache esistono e impostare e verificare correttamente una cache della pagina.
Concetti chiave: cache della pagina, cache del browser, Cache-Control, cache degli oggetti, Redis, OPcache, CDN, plugin di cache, LiteSpeed Cache, eccezioni (accesso effettuato, carrello, checkout), svuotare la cache, plugin di cache doppi
Cache: non fare due volte lo stesso lavoro
Una cache conserva il risultato di un lavoro, in modo che la volta successiva non debba essere rifatto. Su un sito WordPress esistono quattro punti in cui questo avviene, dal più grande al più piccolo:
| Tipo | Cosa viene conservato | Dove | Effetto |
|---|---|---|---|
| Cache della pagina | L'HTML completo di una pagina | Sul server (o presso un CDN) | Il guadagno maggiore: PHP, plugin e database vengono saltati |
| Cache del browser | Fogli di stile, script, immagini, font | Nel browser del visitatore | Una seconda pagina si carica più velocemente, perché i file sono già presenti |
| Cache degli oggetti | Risultati delle query al database | Nella memoria del server (Redis, Memcached) | Aiuta dove la cache della pagina non può intervenire, come per gli utenti con accesso effettuato e i negozi online |
| OPcache | Il codice PHP già tradotto | Nella memoria di PHP | PHP non deve rileggere i file a ogni richiesta; è attiva di default presso la maggior parte dei provider di hosting |
La cache della pagina
La lezione 1.2 lo ha mostrato: senza cache, WordPress ricrea l'intera pagina a ogni visita. Con una cache della pagina, il primo visitatore la genera e i successivi ricevono l'HTML salvato. Un TTFB di un secondo può così scendere a qualche centesimo di secondo, e il Suo piano può gestire molti più visitatori contemporaneamente.
Il modo in cui ottiene una cache della pagina dipende dal Suo server web:
- LiteSpeed (molti hosting condivisi, tra cui WebOké): il server web dispone già di una cache propria. Il plugin gratuito LiteSpeed Cache la gestisce da WordPress: quali pagine possono entrare in cache, quando vengono svuotate. Poiché la cache si trova nel server web, PHP non viene nemmeno avviato per una pagina salvata.
- Apache o nginx: un plugin di cache che salva l'HTML come file, come WP Super Cache, W3 Total Cache o un plugin a pagamento come WP Rocket. Oppure una cache gestita dal provider di hosting a livello di server.
- Hosting WordPress gestito: spesso dispone di una cache propria; in questo caso di norma non si installa un plugin di cache.
Ne scelga uno solo. Due plugin di cache contemporaneamente (ad esempio LiteSpeed Cache e WP Rocket) si intralciano a vicenda: lavoro doppio, pagine che non vengono svuotate, errori strani. Su un server LiteSpeed, LiteSpeed Cache lavora con la cache del server web; un altro plugin di cache non può farlo.
Cosa non deve entrare nella cache
Una cache della pagina fornisce a tutti lo stesso HTML. Questo crea problemi con le pagine che sono diverse per ogni visitatore:
- utenti con accesso effettuato (la barra di amministrazione, "Ciao, Lisa");
- il carrello, il checkout e Il mio account in un negozio online;
- pagine con un modulo con un codice monouso (nonce), che scade dopo un certo tempo;
- pagine che mostrano contenuti diversi in base a posizione, lingua o un cookie.
I buoni plugin di cache escludono automaticamente gli utenti con accesso effettuato e le note pagine di WooCommerce. Con altri plugin (un'area riservata ai membri, un sistema di prenotazione) deve impostare Lei stesso le eccezioni. Il segnale che qualcosa non va: un visitatore vede il carrello di qualcun altro, oppure un modulo restituisce "scaduto" o "richiesta non valida".
Svuotare: quando la cache è obsoleta?
Se modifica una pagina, la versione salvata deve essere eliminata. I plugin di cache, al salvataggio di un articolo, di norma svuotano quella pagina, la homepage e gli archivi. In caso di modifica al menu, al tema o a un widget, spesso è necessario svuotare l'intera cache. Se dopo una modifica vede ancora la versione precedente, svuoti la cache (nella barra di amministrazione del plugin di cache) e verifichi in una finestra privata, in modo che la Sua cache del browser personale non interferisca.
La cache del browser
Il server comunica al browser, tramite intestazioni, per quanto tempo può conservare un file:
cache-control: public, max-age=31536000Questo significa: lo conservi per un anno. Per fogli di stile, script, font e immagini, un tempo lungo va benissimo, perché WordPress, in presenza di una nuova versione, aggiunge un diverso ?ver= dopo l'indirizzo, e il browser lo considera quindi un file nuovo. Per l'HTML stesso è invece comune un tempo breve (o nessuno), in modo che i visitatori vedano rapidamente le modifiche.
Molti provider di hosting e plugin di cache gestiscono questo aspetto automaticamente. Nell'esercizio di questa lezione lo verificherà.
Cache degli oggetti e Redis
Una cache della pagina non aiuta per gli utenti con accesso effettuato né per il carrello. In questo caso aiuta una cache degli oggetti: WordPress conserva il risultato delle query al database in memoria, in un programma come Redis o Memcached. La volta successiva che arriva la stessa richiesta, WordPress recupera la risposta dalla memoria anziché dal database.
Questo è particolarmente utile per negozi online, siti con area membri e siti con molti redattori con accesso effettuato. Per un normale sito informativo con una cache della pagina, la differenza è minima. Una cache degli oggetti richiede che il Suo provider di hosting offra Redis o Memcached; la attiva poi con un plugin (LiteSpeed Cache lo supporta, esistono anche plugin dedicati).
Una CDN
Una CDN (content delivery network) è una rete di server dislocati in molti punti del mondo che conservano copie dei Suoi file (e a volte delle Sue intere pagine). Un visitatore li riceve dal server più vicino. Questo aiuta soprattutto con visitatori lontani e con molto traffico. Per un sito europeo con visitatori europei su un server europeo, il guadagno è minimo. Una CDN con proxy (come Cloudflare) modifica anche il Suo DNS e il Suo certificato (corso DNS lezione 7.5); non lo faccia senza capire cosa comporta.
In pratica: come si presenta in un pannello
Come esempio utilizziamo LiteSpeed Cache su un server LiteSpeed. Altri plugin di cache hanno impostazioni simili con nomi diversi.
- Installi e attivi LiteSpeed Cache in Plugin > Aggiungi nuovo plugin.
- Apra LiteSpeed Cache > Cache: "Abilita cache" è attivo, "Cache utenti con accesso effettuato" è disattivato (a meno che non sappia bene cosa sta facendo).
- In caso di negozio online: verifichi in Escludi che carrello, checkout e Il mio account siano presenti (con WooCommerce avviene automaticamente).
- Lasci disattivati inizialmente gli altri componenti (ottimizzazione di CSS e JavaScript, immagini). Li attivi uno alla volta e testi dopo ogni passaggio: proprio questi componenti talvolta compromettono un tema.
- Verifichi in una finestra privata con gli strumenti di sviluppo (F12, Network, prima richiesta): al secondo caricamento dovrebbe comparire
x-litespeed-cache: hit.
Riepilogo
- Esistono quattro tipi di cache: pagina (il guadagno maggiore), browser, oggetti e OPcache.
- Su un server LiteSpeed, LiteSpeed Cache gestisce la cache del server web; su Apache o nginx si usa un altro plugin di cache. Ne scelga uno solo.
- Utenti con accesso effettuato, carrello, checkout e pagine personali non devono entrare nella cache della pagina.
- Svuoti la cache dopo modifiche al menu o al tema e verifichi in una finestra privata.
- Una cache degli oggetti (Redis) aiuta i negozi online e gli utenti con accesso effettuato; una CDN soprattutto in caso di distanza e molto traffico.
Quiz
Esercizio
Esercizio A6.2: La Sua cache della pagina funziona? Inserisca l'indirizzo del Suo sito. Il programma richiede la homepage due volte a breve distanza, senza cookie, e alla seconda volta verifica la presenza di intestazioni che indicano un cache hit (x-litespeed-cache: hit, x-cache: HIT, cf-cache-status: HIT, un valore age maggiore di 0, oppure l'intestazione di un'altra cache nota). Successivamente richiede un foglio di stile dalla homepage e verifica se il browser può conservarlo per almeno sette giorni (cache-control: max-age o expires). Annoti quale cache sta utilizzando.
Per approfondire
Questi articoli descrivono i passaggi nei pannelli di WebOké; in altri pannelli funzionano in modo simile.
- Guida DirectAdmin 18.3: Il mio sito web è lento
- Guida DirectAdmin 15.7: Redis
- Il mio sito web è lento o utilizza troppa CPU: ecco come renderlo più veloce
- OPcache: 30 secondi di ritardo quando si modifica un file PHP
- Gzip è attivo in DirectAdmin e LiteSpeed o Apache?
- Cache in WordPress (developer.wordpress.org, in inglese): https://developer.wordpress.org/advanced-administration/performance/cache/
