Performance

Lighthouse e CrUX: chi ha ragione quando i numeri non tornano

Cinque run di laboratorio sulla stessa pagina danno LCP da 708 a 908 ms, con un TTFB a freddo di 11.416 ms. CrUX pubblica il 75° percentile di 28 giorni.

In sintesi

  • Lighthouse misura una singola esecuzione in laboratorio; CrUX misura il 75° percentile di 28 giorni di utenti reali.
  • Cinque run sulla stessa pagina hanno dato LCP tra 708 e 908 ms e TTFB tra 319 e 529 ms.
  • Una partenza a freddo ha misurato 11.416 ms di TTFB: una sola run può descrivere un caso che gli utenti non vedono.
  • Quando i due numeri divergono, il laboratorio spiega il perché e il campo dice se conta.

Lighthouse e CrUX non sono due misure della stessa cosa: Lighthouse è una singola esecuzione in laboratorio, CrUX è il 75° percentile di 28 giorni di utenti reali. Quando i numeri non tornano ha ragione CrUX sul verdetto e Lighthouse sulla diagnosi. Cinque run sulla nostra home hanno dato LCP tra 708 e 908 ms, e una partenza a freddo ha misurato 11.416 ms di TTFB.

Due misure, due domande

DomandaLighthouseCrUX
Chi misuraun browser headless, una voltautenti reali, 28 giorni
Che numero pubblicaun campioneil 75° percentile
Copre il dispositivo peggioreno, ne emula unosì, se quegli utenti esistono
Quanto è veloce da otteneresecondi, in localegiorni, e serve traffico sufficiente
Cosa fa una regressionela mostra subitola mostra dopo giorni

Nella nostra serie il campo di variazione del TTFB è 319-529 ms, cioè 210 ms tra una run e l'altra sulla stessa pagina, dalla stessa rete. La run a freddo arriva a 11.416 ms. Chi guarda una sola esecuzione vede uno di questi tre mondi e lo chiama "la performance del sito".

Il comando

npx lighthouse https://example.com/ --only-categories=performance --preset=desktop \
  --output=json --output-path=./lh.json --chrome-flags="--headless=new"
node -e "const r=require('./lh.json');console.log(Math.round(r.audits['largest-contentful-paint'].numericValue))"

Il comando richiede Node, Chrome e una connessione; la prima esecuzione scarica Lighthouse. numericValue è l'LCP in millisecondi di quella singola run. Ripetilo cinque volte: se i valori ballano, il numero da citare è la mediana con il suo intervallo, non la run migliore.

Perché il laboratorio e il campo divergono

Un laboratorio misura una macchina veloce con una rete buona, oppure emula una macchina lenta con una rete lenta: in entrambi i casi misura un modello. Il campo misura telefoni veri, con cache diverse, estensioni, 4G affollato e batterie quasi scariche. La divergenza non è un errore di uno dei due strumenti: è la differenza tra una prova controllata e un campione.

Il limite da dichiarare

Non abbiamo interrogato l'API CrUX, che richiede una chiave e un'origine con traffico sufficiente: i dati di campo di questo sito non sono pubblicati qui. Le cinque run vengono da una sola rete e da un solo dispositivo. Quindi il confronto onesto è tra una distribuzione di laboratorio e le soglie di campo, non tra due numeri di campo.

Dove continuare

Il catalogo EneUI indicizza 111.985 componenti, i blocchi chart e il record hero parallax, un hero che sposta l'LCP più di qualunque tweak. Per il confronto tra laboratorio e campo leggi misurare l'LCP, per mettere le soglie in CI Lighthouse CI con soglie, per la reattività INP: cosa misura, e per il confronto tra architetture framework frontend a confronto.

Domande frequenti

Se Lighthouse dà 98 e CrUX dice "da migliorare", chi sbaglia?

Nessuno dei due. Lighthouse ha misurato una run su una macchina veloce, CrUX il 75° percentile dei tuoi utenti. Il campo decide se la pagina passa, il laboratorio spiega quale parte del codice pesa.

Perché due run di Lighthouse danno punteggi diversi?

Perché ogni run è un campione: rete, cache, altri processi e avvio del browser cambiano. Nella nostra serie l'LCP è passato da 708 a 908 ms e il TTFB da 319 a 529 ms sulla stessa pagina.

CrUX misura tutte le pagine del sito?

No. Pubblica dati per origine e, sopra una soglia di traffico, per URL. Le pagine poco visitate non hanno dati propri: entrano nell'aggregato dell'origine.

Posso usare CrUX al posto di un RUM mio?

CrUX è un dato pubblico e aggregato, utile come riferimento esterno. Non ti dà il dettaglio per pagina, dispositivo o versione del codice: per quello serve un RUM tuo.

Quale soglia uso in CI?

Le soglie di laboratorio sono più severe di quelle di campo: un budget su LCP intorno a 2.500 ms in laboratorio lascia margine al campo. Fissa il budget sulla mediana di più run, non sulla migliore.