100 punti su PageSpeed: che cosa abbiamo cambiato
Il tempo di caricamento è un fattore di posizionamento, ma i consigli abituali servono di rado. Questo articolo descrive che cosa abbiamo davvero cambiato sul nostro sito, quanto ha reso ciascun intervento e dove abbiamo sbagliato strada.
In breve
- Il singolo guadagno maggiore non è arrivato dal comprimere i file, ma dal sostituire una libreria da 458 KB con 6 KB di codice proprio.
- La seconda causa in ordine di peso era una compressione configurata a metà: il server comprimeva solo l'HTML, non CSS e JavaScript.
- Uno spostamento di layout con valore 1 è costato 24 punti, provocato da CSS caricato in ritardo che entrava in azione solo dopo la prima resa a video.
- Ciò che ha reso meno: i formati delle immagini. Ciò che ha reso di più: togliere cose.
Il valore di partenza era 58 su 100 su telefono. Non è un valore scadente per un sito con un effetto 3D nell'intestazione, ma è un valore che Google penalizza in modo percepibile nella ricerca da mobile. Alla fine siamo arrivati a 100 punti su computer e 98 su telefono, con 100 anche per l'accessibilità.
Quello che segue non è una lista di controllo generica, ma il percorso reale, compresi i punti in cui ci siamo sbagliati.
Il punto di partenza
| Valore misurato (mobile) | prima | dopo |
|---|---|---|
| Prestazioni | 58 | 98 |
| Accessibilità | 95 | 100 |
| Prima resa a video | 6,1 s | 1,4 s |
| Elemento più grande visibile | 11,1 s | 2,1 s |
| Totale trasferito | 298 KB | 184 KB |
| di cui JavaScript | 121 KB | 5 KB |
I cinque interventi che hanno contato davvero
1. Sostituire la libreria, non ottimizzarla
L'intestazione mostra una nuvola di particelle in 3D. Per farlo girava una nota libreria grafica: 458 KB dopo la minimizzazione. La misurazione indicava che 51 KB di quel codice non venivano nemmeno mai eseguiti.
Lo sguardo decisivo è stato la domanda su quanto ce ne servisse davvero. Erano undici componenti: renderer, scena, camera, geometria, materiale e qualche classe di supporto. Tutto questo si può programmare direttamente contro l'interfaccia grafica del browser.
Risultato: 458 KB sono diventati 6 KB. La resa visiva è identica: abbiamo ripreso gli stessi shader.
2. La compressione era attiva solo a metà
Nella configurazione del server la compressione era su «attiva», ma la riga che indica quali tipi di file comprimere era commentata. È l'impostazione predefinita di molte distribuzioni. Risultato: veniva compresso esclusivamente l'HTML.
La libreria grafica passava quindi sulla linea senza compressione. Dopo l'attivazione: 1243 KB sono diventati 251 KB. In più teniamo ora accanto le versioni compresse precalcolate, così il server non ricalcola a ogni richiesta.
Impegno: due righe di configurazione. Effetto: quasi un megabyte per ogni primo accesso.
3. Rimuovere del tutto la libreria di animazione
Per le comparse allo scorrimento girava un'altra libreria, 114 KB. La misurazione la indicava anche come causa di ricalcoli forzati del layout: durante lo scorrimento interrogava la geometria e costringeva il browser a ricalcolare l'impaginazione nel mezzo del movimento.
Sostituita con un IntersectionObserver che si limita ad assegnare una classe. Il movimento vero lo fa il CSS. 114 KB in meno, nessun ricalcolo, circa 40 righe di codice proprio.
4. La favicon pesava 205 KB
Un dettaglio con un effetto sorprendente, perché viene caricata molto presto. Sostituita con un file SVG da 6 KB, generato dal logo esistente.
Lo sapevi?
Per la visualizzazione nei risultati di ricerca di Google una favicon SVG non serve: lì Google accetta solo formati raster, e l'immagine deve essere quadrata con un lato multiplo di 48 pixel.
Chi quindi carica soltanto un SVG ottiene nel risultato di ricerca il segnaposto grigio al posto del proprio logo. Indicare entrambi insieme è la strada giusta.
5. Interrogare la geometria dentro il frame di animazione
Uno script leggeva l'altezza complessiva del documento a ogni evento di scorrimento. Questa proprietà il browser non può ricavarla dalla memoria: deve ricalcolare l'impaginazione dell'intera pagina, nel mezzo dello scorrimento.
La regola che ne deriva e che vale ovunque: leggere nell'evento, scrivere nel fotogramma successivo. Mai il contrario. Da allora l'altezza della pagina viene misurata una volta e memorizzata, invece di essere richiesta sessanta volte al secondo.
L'errore che è costato 24 punti
Per eliminare l'ultima richiesta bloccante avevamo diviso il foglio di stile: la parte necessaria all'area visibile finiva direttamente nel documento, il resto veniva caricato dopo. Un procedimento diffuso.
Il taglio cadeva su un segno nel file sorgente dietro cui pensavamo ci fosse l'area visibile. In realtà lì dietro c'erano le regole per il logo nell'intestazione, per le spaziature sottostanti e per le comparse. La pagina si costruiva quindi senza di esse e un secondo dopo veniva riassestata.
Il risultato: Cumulative Layout Shift pari a 1,0, e quindi 76 punti invece di 100 su computer. Particolarmente sgradevole: in locale con linea rallentata il valore era 0, perché lì il foglio di stile arrivava abbastanza presto. L'errore era visibile solo su connessione veloce.
La lezione: o tutto il foglio di stile dentro il documento o nessuno. Un inserimento parziale presuppone di sapere esattamente quale regola serve nell'area visibile, e su una pagina che cresce non lo si sa mai in modo stabile.
Che cosa ha reso poco
Per completezza, le misure che compaiono in ogni guida e che da noi sono state a malapena misurabili:
Formati delle immagini. La nostra pagina iniziale ha poche immagini: il logo è un file SVG. Dove ci sono immagini la conversione conviene, naturalmente; come leva principale funziona solo su pagine ricche di immagini.
Ridurre ulteriormente i caratteri. Ospitiamo due famiglie di caratteri in proprio e precarichiamo quelle necessarie nell'area visibile. Un'ulteriore ottimizzazione sarebbe possibile, ma non muove il valore.
Posizione del server. Consigliata spesso, nel nostro caso irrilevante: il tempo fino al primo byte era già di 20 millisecondi. Chi è già a posto lì non guadagna nulla da una rete di distribuzione.
Il procedimento da rifare
- Misurare prima di cambiare qualsiasi cosa. Mobile e desktop separati, annotando i valori.
- Cercare il file trasferito più grande. Quasi sempre è JavaScript. La domanda non è come rimpicciolirlo, ma se serva.
- Verificare la compressione. Non se è attiva, ma per quali tipi di file.
- Contare le richieste bloccanti. Ogni file di foglio di stile nell'intestazione trattiene la prima resa a video.
- Verificare gli spostamenti di layout senza rallentamenti. L'unico test che a noi è mancato.
- Rimisurare dopo ogni modifica. Altrimenti alla fine non si sa che cosa ha funzionato.
Aiutami a tradurre il rapporto PageSpeed della mia pagina in un ordine di priorità. Sii severo; non lodare nulla. I miei valori: - Mobile: [punteggio], desktop: [punteggio] - LCP, TBT, CLS per dispositivo: [valori] - File trasferiti più grandi con dimensione: [elenco] - Richieste che bloccano la resa: [elenco] - Segnalazioni dal rapporto: [inserire testo] Sulla pagina: - Come è costruita: [CMS / statica / costruttore] - Serve JavaScript per il contenuto visibile? [sì/no] - Come viene servito il CSS? [esterno / in anticipo / parzialmente in anticipo] Compiti: 1. Assegna ogni segnalazione a una causa e di' quale metrica influenza: LCP, TBT o CLS. 2. Ordina le misure per effetto rapportato all'impegno. Per ciascuna indica quanti punti muove realisticamente e perché. 3. Indica le misure del rapporto che con la mia struttura non portano praticamente nulla, e motivalo invece di ometterle. 4. Per ogni file JavaScript grande chiedi prima se serve, prima di proporre la minimizzazione. 5. Segnala se il CSS viene servito in anticipo solo in parte, e spiega perché per il CLS questo può essere peggio che non farlo affatto. 6. Indica che cosa dovrei rimisurare dopo ogni modifica. Non inventare valori misurati.
Conclusione
Il punteggio in sé non è l'obiettivo: è un valore misurato, non un risultato aziendale. Ciò che conta è l'esperienza dietro di esso: una pagina leggibile dopo 1,4 secondi viene letta da più persone di una che ne impiega sei. Per i visitatori da mobile su rete cellulare la differenza è maggiore di qualsiasi ottimizzazione del testo.
La strada per arrivarci è passata nel nostro caso da un'unica domanda ricorrente: ci serve? Cinque interventi su sei sono consistiti nel togliere qualcosa, non nell'aggiungerla.
Domande frequenti
Come si arriva a 100 punti su PageSpeed Insights?
Nella maggior parte dei siti in tre passi: rimuovere o sostituire il file JavaScript più grande, attivare davvero la compressione per CSS e JavaScript, ed eliminare gli spostamenti di layout. I formati delle immagini e la posizione del server sono raramente il collo di bottiglia.
Quanto conta il tempo di caricamento per il posizionamento su Google?
È un fattore confermato ma non forte: contenuto e pertinenza pesano di più. L'effetto maggiore è indiretto: le pagine lente vengono abbandonate più spesso, e questo comportamento entra nella valutazione.
Che cos'è il Cumulative Layout Shift e come si risolve?
È il valore che misura gli elementi che cambiano posizione dopo la prima resa a video. Cause più frequenti: immagini senza dimensioni fisse, fogli di stile caricati in ritardo e caratteri con metriche molto diverse. Si risolve facendo in modo che lo spazio sia stabilito in anticipo, tramite indicazioni di larghezza e altezza o un rapporto d'aspetto fisso.
Conviene inserire il CSS dentro l'HTML?
Con fogli di stile piccoli sì, ma allora per intero. Un inserimento parziale con caricamento successivo del resto risparmia una richiesta e in cambio si porta a casa spostamenti di layout non appena manca una regola dell'area visibile. Da noi erano 7 KB compressi: per quello l'inserimento completo conviene.
Quanto rende rinunciare alle librerie?
Nel nostro caso la voce singola più grande: 458 KB di libreria grafica sono diventati 6 KB di codice proprio, più 114 KB di libreria di animazione azzerati. Se convenga dipende da quanta parte della libreria si usa davvero: la misurazione indica il JavaScript non utilizzato.
Un marketing che si configura da solo
La beta di Studio Engine è aperta. Prenota il tuo posto e contribuisci fin dall’inizio.
Partecipa alla beta →