Quando un sito "sembra lento", la colpa è spesso di un numero che pochi guardano: il tempo al primo byte, in inglese Time To First Byte o TTFB. È il tempo che passa da quando il browser chiede una pagina a quando arriva il primo pezzo della risposta. Finché non arriva, il visitatore guarda una pagina bianca.
Cosa c'è dentro il tempo al primo byte
Il TTFB somma diverse attese:
- DNS: trovare l'indirizzo del sito;
- connessione: raggiungere il server, e più è lontano più ci vuole;
- HTTPS: lo scambio di chiavi per la connessione cifrata;
- attesa del server: il tempo che il server impiega a preparare la pagina. Su un CMS significa avviare PHP, caricare plugin e interrogare il database.
La quarta voce è quasi sempre la più grande, ed è quella su cui si può fare di più.
Come misurarlo in un minuto
Dal terminale, con curl:
curl -o /dev/null -s -w "DNS %{time_namelookup}s\nConnessione %{time_connect}s\nHTTPS %{time_appconnect}s\nPrimo byte %{time_starttransfer}s\n" https://www.tuosito.it/
Dal browser: apri gli strumenti per sviluppatori (F12), scheda Rete, ricarica la pagina e clicca sulla prima richiesta. Alla voce Tempi trovi "In attesa della risposta del server": è l'attesa del server.
Come regola pratica:
| Tempo al primo byte | Giudizio |
|---|---|
| Sotto 200 ms | Buono |
| 200 – 600 ms | Migliorabile |
| Sopra 600 ms | Lento: il visitatore se ne accorge |
Misura più volte e da posti diversi: la prima richiesta dopo un periodo di calma è spesso più lenta, perché le cache del server sono "fredde".
Perché il tuo sito è lento
- Nessuna cache delle pagine: ogni visita rifà da capo tutto il lavoro;
- plugin pesanti o troppi plugin, che aggiungono interrogazioni al database a ogni pagina;
- database lento o mai ottimizzato;
- hosting sovraffollato, dove il processore è condiviso con troppi altri siti;
- server lontano dal pubblico;
- picchi di traffico o bot che consumano le risorse.
La soluzione più efficace: la cache
Una pagina in cache è già pronta: nessuno deve prepararla. Ci sono due livelli.
Cache sul server. Un plugin di cache o la cache dell'hosting salvano la pagina finita e la riconsegnano alle visite successive. L'attesa del server scende di molto, ma la richiesta arriva comunque fino al tuo server, magari da lontano.
Cache sulla CDN. La pagina e i file stanno sui nodi, vicino ai visitatori. La richiesta non arriva nemmeno al tuo server: risponde il nodo, in pochi millisecondi.
Un caso reale: Maremma24
Maremma24 è un giornale online che usa 1PrimeCDN. Abbiamo misurato l'attesa del server del sito, dagli stessi punti, con e senza la CDN:
| Punto di misura | Senza CDN | Con 1PrimeCDN |
|---|---|---|
| Gravelines | 11,6 ms | 1,0 ms |
| Falkenstein | 7,7 ms | 0,7 ms |
| Limburg | 3,7 ms | 0,3 ms |
Il server di Maremma24 era già veloce di suo; con la CDN l'attesa è scesa di circa dieci volte, perché risponde il nodo con la pagina già pronta. Su siti con server più lenti la differenza è ancora più grande. Nel pannello di 1PrimeCDN la sezione Performance fa la stessa misura sul tuo sito, da tutti i nodi.
Come dire alla CDN cosa tenere in cache
Il modo più pulito è che sia il sito a dirlo, con l'intestazione Cache-Control:
Cache-Control: public, max-age=300
significa "questa pagina si può tenere in cache per 5 minuti". Per i file che cambiano nome a ogni versione (per esempio style.3f2a.css) si può arrivare a un anno:
Cache-Control: public, max-age=31536000, immutable
Le pagine personali devono invece dire di non essere messe in cache:
Cache-Control: private, no-store
Su 1PrimeCDN puoi lasciar decidere al sito oppure impostare una durata per tutta la zona. In ogni caso le pagine richieste da chi ha fatto l'accesso (con un cookie di sessione) vanno sempre al server, mentre immagini, CSS e JavaScript restano in cache per tutti.
Quando cambia qualcosa: svuota la cache
Se pubblichi un articolo o cambi un prezzo e la pagina resta vecchia, basta svuotare la cache: di tutta la zona o solo di alcuni indirizzi, dal pannello o via API, così il tuo CMS può farlo da solo a ogni modifica. Su 1PrimeCDN lo svuotamento risulta completato solo quando l'hanno confermato tutti i nodi.
In sintesi
- il tempo al primo byte è quello che il visitatore passa davanti a una pagina bianca;
- la parte più grande è quasi sempre l'attesa del server;
- la cache è la soluzione più efficace, e sulla CDN è ancora più veloce perché risponde un nodo vicino;
- lascia che sia il sito a dire cosa tenere in cache, e svuotala quando cambia qualcosa.
Se il sito è lento all'improvviso e non hai cambiato niente, potrebbe non essere colpa del server: leggi come capire se il sito è sotto attacco DDoS.
Vuoi un sito che regge anche sotto attacco?
1PrimeCDN mette il tuo sito dietro 8 nodi europei con cache, HTTPS e lo Shield contro bot e attacchi, a canone fisso dal 9,90 € al mese.