Regole e consigli di PageSpeed

Ilya Grigorik
Ilya Grigorik

Pubblicato il 17 agosto 2018

Questa guida esamina le regole di PageSpeed Insights nel contesto: a cosa prestare attenzione durante l'ottimizzazione del percorso di rendering critico e perché.

Elimina JavaScript e CSS che bloccano la visualizzazione

Per garantire il tempo più rapido per la prima visualizzazione, minimizza ed elimina (ove possibile) il numero di risorse critiche sulla pagina, riduci al minimo il numero di byte critici scaricati e ottimizza la lunghezza del percorso critico.

Ottimizza l'utilizzo di JavaScript

Le risorse JavaScript sono bloccate dal parser per impostazione predefinita, a meno che non siano contrassegnate come async o aggiunte utilizzando uno snippet JavaScript speciale. Il blocco del parser JavaScript costringe il browser ad attendere il CSSOM e mette in pausa la costruzione del DOM, il che può ritardare notevolmente il tempo del primo rendering.

Preferisci le risorse JavaScript asincrone

Le risorse asincrone sbloccano il parser dei documenti e consentono al browser di evitare il blocco dei CSSOM prima di eseguire lo script. Spesso, se lo script può utilizzare l'attributo async, significa anche che non è essenziale per il primo rendering. Valuta la possibilità di caricare gli script in modo asincrono dopo il rendering iniziale.

Evita le chiamate al server sincrone

Utilizza il metodo navigator.sendBeacon() per limitare i dati inviati da XMLHttpRequests in Gestori unload. Poiché molti browser richiedono che tali richieste asincroni, possono rallentare le transizioni delle pagine, a volte in modo significativo. Il codice riportato di seguito mostra come utilizzare navigator.sendBeacon() per inviare dati al server nell'handler pagehide anziché nell'handler unload.

<script>
  function() {
    window.addEventListener('pagehide', logData, false);
    function logData() {
      navigator.sendBeacon(
        'https://putsreq.herokuapp.com/Dt7t2QzUkG18aDTMMcop',
        'Sent by a beacon!');
    }
  }();
</script>

Il metodo fetch() offre un modo migliore per richiedere i dati in modo asincrono. fetch() elabora le risposte utilizzando le promesse anziché più gestori di eventi. A differenza della risposta a una XMLHttpRequest, una risposta fetch() è un oggetto stream. Ciò significa che anche una chiamata a json() restituisce una promessa.

<script>
  fetch('./api/some.json')
    .then(
      function(response) {
        if (response.status !== 200) {
          console.log('Looks like there was a problem. Status Code: ' +  response.status);
          return;
        }
        // Examine the text in the response
        response.json().then(function(data) {
          console.log(data);
        });
      }
    )
    .catch(function(err) {
      console.log('Fetch Error :-S', err);
    });
</script>

Il metodo fetch() può gestire anche le richieste POST.

<script>
  fetch(url, {
    method: 'post',
    headers: {
      "Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
    },
    body: 'foo=bar&lorem=ipsum'
  }).then(function() { // Additional code });
</script>

Rimanda l'analisi del codice JavaScript

Per ridurre al minimo il lavoro che il browser deve eseguire per eseguire il rendering della pagina, riassegna gli script non essenziali che non sono fondamentali per la costruzione dei contenuti visibili per il rendering iniziale.

Evita JavaScript con tempi di esecuzione lunghi

Il codice JavaScript a esecuzione prolungata impedisce al browser di costruire il DOM, il CSSOM ed eseguire il rendering della pagina, quindi riassegna a un secondo momento qualsiasi logica di inizializzazione non essenziale per il primo rendering. Se è necessario eseguire una sequenza di inizializzazione lunga, valuta la possibilità di suddividerla in più fasi per consentire al browser di elaborare altri eventi nel frattempo.

Ottimizza l'utilizzo del CSS

Il CSS è necessario per costruire la struttura di rendering e JavaScript spesso si blocca sul CSS durante la costruzione iniziale della pagina. Assicurati che tutti i CSS non essenziali siano contrassegnati come non critici (ad esempio, query di stampa e altre query multimediali) e che la quantità di CSS fondamentale e i tempi di pubblicazione siano il più possibile ridotti.

Inserisci risorse CSS nell'intestazione del documento

Specifica tutte le risorse CSS il prima possibile all'interno del documento HTML in modo che il browser possa rilevare i tag <link> e inviare la richiesta per il CSS il prima possibile.

Evitare importazioni CSS

L'istruzione CSS di importazione (@import) consente a un foglio di stile di importare regole da un altro file di foglio di stile. Tuttavia, evita queste direttive perché introducono ulteriori viaggi di andata e ritorno nel percorso critico: le risorse CSS importate vengono rilevate solo dopo che lo stile CSS con la regola @import stessa è stato ricevuto e analizzato.

Incorpora risorse CSS che bloccano la visualizzazione

Per ottenere le migliori prestazioni, ti consigliamo di incorporare il CSS critico direttamente nel documento HTML. In questo modo vengono eliminati ulteriori round trip nel percorso critico e, se eseguiti correttamente, è possibile ottenere una lunghezza del percorso critico "one round trip" in cui solo l'HTML è una risorsa bloccante.

Feedback