Mettere in cache una pagina già renderizzata trasforma una richiesta da 400 ms in una da 5 ms. Vuol dire anche che tutti ricevono la stessa pagina: esattamente giusto per un articolo ed esattamente sbagliato per un carrello, una dashboard o qualsiasi cosa che pronunci il nome del visitatore.
La regola
Metta in cache una risposta solo se sarebbe identica per uno sconosciuto. Se una qualunque sua parte dipende da chi la chiede, o non la metta in cache, o tolga quella parte dall'HTML in cache e la vada a prendere a parte.
Che cosa non va mai messo in cache
- Tutto ciò che sta dietro un accesso, compresa la pagina che mostra lo stato di accesso nell'intestazione.
- Le pagine carrello, cassa, account e ordini.
- Tutto ciò che contiene un token CSRF: un token condiviso non è un token. Veda CSRF e moduli.
- I risultati di ricerca che contengono cronologia personale.
Dica alla cache che cosa varia
# skip the cache when a session cookie is present
fastcgi_cache_bypass $cookie_session $http_authorization;
fastcgi_no_cache $cookie_session $http_authorization;
Dimostri quale le è arrivata
add_header X-Cache-Status $upstream_cache_status;
curl -sSI https://yourdomain.com/ | grep -i x-cache
HIT, MISS e BYPASS in quell'intestazione rispondono in un secondo a ciò cui un pomeriggio di configurazione letta non risponderà. Se una pagina con l'utente autenticato dice HIT, si fermi e la sistemi prima di fare qualunque altra cosa.
L'altra metà: l'invalidazione
Una cache che non viene mai svuotata mostra il prezzo di ieri. Svuoti alla pubblicazione, e sappia svuotare tutto a mano quando un deploy cambia i template.