Esegui il debug delle regole di speculazione con Chrome DevTools

Le regole di speculazione possono essere utilizzate per eseguire il pre-caricamento e il pre-rendering delle pagine di navigazione successive, come descritto nel post precedente. In questo modo, è possibile caricare le pagine molto più velocemente o addirittura istantaneamente, migliorando notevolmente i Segnali web essenziali per queste navigazioni aggiuntive nelle pagine.

Il debug delle regole di speculazione può essere complicato. Questo è particolarmente vero per le pagine sottoposte a prerendering, in quanto vengono visualizzate in un renderer separato, un po' come una scheda di sfondo nascosta che sostituisce la scheda corrente quando viene attivata. Di conseguenza, non è sempre possibile utilizzare le normali opzioni di DevTools per il debug dei problemi.

Il team di Chrome si sta adoperando per migliorare il supporto di DevTools per il debug delle regole di speculazione. In questo post, scoprirai tutti i vari modi per utilizzare questi strumenti per comprendere le regole di speculazione di una pagina, il motivo per cui potrebbero non funzionare e quando gli sviluppatori possono utilizzare le opzioni di DevTools più familiari e quando no.

Spiegazione dei termini "pre-"

Esistono molti termini "pre-" che creano confusione, perciò inizieremo con una spiegazione di questi:

  • Precaricamento: recupero di una risorsa o di un documento in anticipo per migliorare le prestazioni future. Questo post illustra il precaricamento dei documenti utilizzando l'API Speculation Rules, anziché l'opzione <link rel="prefetch"> simile, ma precedente, spesso utilizzata per il precaricamento delle risorse secondarie.
  • Prerendering: va oltre il pre-caricamento e esegue il rendering dell'intera pagina come se l'utente ci avesse eseguito l'accesso, ma la mantiene in un processo di rendering in background nascosto pronto per essere utilizzato se l'utente vi accede effettivamente. Ancora una volta, questo documento riguarda la versione più recente dell'API Speculation Rules, anziché l'opzione <link rel="prerender"> precedente (che non esegue più un prerendering completo).
  • Stime di navigazione: il termine collettivo per le nuove opzioni di prefetch e prerendering attivate dalle regole di stima.
  • Precaricamento: un termine sovraccaricato che può fare riferimento a una serie di tecnologie e processi, tra cui <link rel="preload">, lo scanner di precaricamento e i precaricamenti di navigazione dei service worker. Questi elementi non verranno trattati qui, ma il termine è incluso per distinguerli chiaramente dal termine "speculazioni di navigazione".

Regole di speculazione per prefetch

Le regole di speculazione possono essere utilizzate per prelevare in anteprima il documento della navigazione successiva. Ad esempio, quando inserisci il seguente JSON in una pagina, next.html e next2.html verranno prelevati:

<script type="speculationrules">
  {
    "prefetch": [
      {
        "source": "list",
        "urls": ["next.html", "next2.html"]
      }
    ]
  }
</script>

L'utilizzo di regole di speculazione per i precaricamenti di navigazione presenta alcuni vantaggi rispetto alla precedente sintassi <link rel="prefetch">, ad esempio un'API più espressiva e la memorizzazione dei risultati nella cache della memoria anziché nella cache su disco HTTP.

Eseguire il debug delle regole di speculazione prefetch

I pre-caricamenti attivati dalle regole di speculazione sono visibili nel riquadro Rete come gli altri caricamenti:

Riquadro Rete in Chrome DevTools che mostra i documenti prerecuperati
Riquadro Rete in Chrome DevTools che mostra i documenti prerecuperati

Le due richieste evidenziate in rosso sono le risorse precaricate, come indicato nella colonna Type (Tipo). Vengono recuperati con priorità Lowest perché sono destinati a navigazioni future e Chrome dà la priorità alle risorse della pagina corrente.

Se fai clic su una delle righe, viene visualizzata anche l'intestazione HTTP Sec-Purpose: prefetch, che consente di identificare queste richieste lato server:

Intestazioni di precaricamento di Chrome DevTools con Sec-Purpose impostato su prefetch
Intestazioni di precaricamento di Chrome DevTools con Sec-Purpose impostato su pre-caricamento

Esegui il debug di prefetch con le schede Caricamenti speculativi

È stata aggiunta una nuova sezione Carichi speculativi nel riquadro Applicazione di Chrome DevTools, nella sezione Servizi in background, per facilitare il debug delle regole di speculazione:

Schede di caricamento speculativo di Chrome DevTools che mostrano la regola di precaricamento
Schede Carico speculativo di Chrome DevTools che mostrano la regola di prefetching

In questa sezione sono disponibili tre schede:

  • Caricamenti speculativi, che elencano lo stato di prerendering della pagina corrente.
  • Regole, che elenca tutti i set di regole trovati nella pagina corrente.
  • Stime, che elenca tutti gli URL prerecuperati e pre-visualizzati dagli insiemi di regole.

La scheda Stime è mostrata nello screenshot precedente e possiamo vedere che questa pagina di esempio contiene un unico insieme di regole di stima per il pre-caricamento di tre pagine. Due di questi precaricamenti sono riusciti, mentre uno non è andato a buon fine. Puoi fare clic sull'icona accanto al set di regole per passare all'origine del set di regole nel riquadro Elementi. In alternativa, puoi fare clic sul link Stato per accedere alla scheda Stime filtrata in base al set di regole.

La scheda Stime elenca tutti gli URL target, insieme all'azione (prefetch o prerendering), all'insieme di regole da cui provengono (poiché potrebbero essercene più di uno in una pagina) e allo stato di ogni stima:

Scheda Supposizioni di Chrome DevTools che mostra gli URL prerecuperati e il relativo stato
Scheda Spekulations di Chrome DevTools che mostra gli URL prerecuperati e il relativo stato

Sopra gli URL, puoi utilizzare un menu a discesa per mostrare gli URL di tutti gli insiemi di regole o solo quelli di un determinato insieme di regole. Sotto sono elencati tutti gli URL. Se fai clic su un URL, vengono visualizzate informazioni più dettagliate.

In questo screenshot, possiamo vedere il motivo dell'errore della pagina next3.html, che non esiste e restituisce un errore 404, che è un codice di stato HTTP non 2xx.

La scheda riepilogativa Caricamenti speculativi mostra un report Stato di caricamento speculativo per questa pagina per indicare se è stato utilizzato o meno un prefetch o un prerendering per questa pagina.

Per una pagina precaricata, dovresti visualizzare un messaggio di operazione riuscita quando accedi a quella pagina:

Scheda Caricamenti speculativi di Chrome DevTools che mostra un pre-caricamento riuscito
Scheda Caricamenti speculativi di Chrome DevTools che mostra un precaricamento riuscito

Speculazioni senza corrispondenza

Quando si verifica una navigazione da una pagina con regole di speculazione che non comporta l'utilizzo di un precaricamento o di un prerendering, una sezione aggiuntiva della scheda mostra ulteriori dettagli sul motivo per cui l'URL non corrisponde a nessuno degli URL di speculazione. Questo è utile per individuare errori ortografici nelle regole di speculazione.

Scheda Caricamenti speculativi di Chrome DevTools, che mostra come l&#39;URL corrente non corrisponda a nessuno degli URL nelle regole di speculazione della pagina precedente
Gli URL senza corrispondenza vengono evidenziati in DevTools

Ad esempio, qui abbiamo eseguito la navigazione su next4.html, ma solo next.html, next2.html o next3.html sono precaricamenti, quindi possiamo vedere che non corrisponde a nessuna di queste tre regole.

Le schede Carichi speculativi sono molto utili per eseguire il debug delle regole di speculazione stesse e trovare eventuali errori di sintassi nel JSON.

Per quanto riguarda i pre-caricamenti stessi, il riquadro Rete è probabilmente un luogo più familiare. Per l'esempio di errore di prefetch, puoi vedere l'errore 404 per il prefetch qui:

Riquadro Network (Rete) di Chrome DevTools che mostra un precaricamento non riuscito
Riquadro della rete di Chrome DevTools che mostra un precaricamento non riuscito

Tuttavia, le schede Carichi di speculazione diventano molto più utili per le regole di speculazione del prerendering, che verranno trattate di seguito.

Regole di speculazione per prerender

Le regole di speculazione di prerendering seguono la stessa sintassi delle regole di speculazione di precaricamento. Ad esempio:

<script type="speculationrules">
  {
    "prerender": [
      {
        "source": "list",
        "urls": ["next.html", "next2.html"]
      }
    ]
  }
</script>

Questa serie di regole attiva il caricamento completo e il rendering delle pagine specificate (soggetto a determinate limitazioni). In questo modo puoi offrire un'esperienza di caricamento istantanea, anche se con costi aggiuntivi per le risorse.

Tuttavia, a differenza dei pre-caricamenti, non sono disponibili nel riquadro Rete, in quanto vengono recuperati e visualizzati in un processo di rendering separato in Chrome. Ciò rende le schede Carichi speculativi più importanti per il debug delle regole di speculazione del prerendering.

Esegui il debug di prerender con le schede Caricamenti speculativi

Le stesse schermate di caricamenti speculativi possono essere utilizzate per le regole di speculazione del prerendering, come dimostrato con una pagina demo simile che tenta di eseguire il prerendering, anziché il precaricamento, delle tre pagine:

Chrome DevTools carica in modo speculativo le schede per una pagina con regole di speculazione di prerendering
Chrome DevTools Speculative carica le schede per una pagina con regole di speculazione di prerendering

Qui vediamo di nuovo che il prerendering di uno dei tre URL non è riuscito e gli sviluppatori possono ottenere i dettagli per URL nella scheda Stime facendo clic sul link 2 pronti, 1 errore.

In Chrome 121 abbiamo lanciato il supporto delle regole dei documenti. In questo modo, il browser può rilevarli dai link della stessa origine nella pagina, anziché elencare un insieme specifico di URL:

<script type="speculationrules">
{
  "prerender": [
    {
      "source": "document",
      "where": {
        "and": [
          {"href_matches": "/*"},
          {"not": { "href_matches": "/not-safe-to-prerender/*"}}
        ]
      },
      "eagerness": "moderate"
    }
  ]
}
</script>

Questo esempio seleziona tutti i link con la stessa origine, tranne quelli che iniziano con /not-safe-to-prerender, come candidati per il prerendering.

Imposta inoltre il prerendering eagerness su moderate, il che significa che le navigazioni vengono pre-renderizzate quando si passa il mouse sopra il link o si fa clic su di esso.

Esistono regole simili a questa sul sito demo delle regole speculative e l'utilizzo della nuova sezione Carichi speculativi su questo sito mostra l'utilità di questa nuova scheda, in quanto vengono elencati tutti gli URL idonei trovati dal browser nella pagina:

Scheda Supposizioni di Chrome DevTools con una serie di URL non attivati
Scheda Speculazioni di Chrome DevTools con una serie di URL non attivati

Lo stato è Non attivato perché il processo di prerendering non è stato avviato. Tuttavia, quando manteniamo il puntatore sui link, notiamo che lo stato cambia man mano che viene eseguito il prerendering di ogni URL:

Scheda Supposizioni di Chrome DevTools con pagine pre-renderizzate attivate
Scheda Supposizioni di Chrome DevTools con pagine pre-renderizzate attivate

Chrome ha impostato dei limiti per i prerendering, tra cui un massimo di 2 prerendering per l'eagerness moderate, quindi dopo aver passato il mouse sopra il terzo link, viene visualizzato il motivo dell'errore per quell'URL:

Scheda Supposizioni di Chrome DevTools con preload non riusciti visualizzati
Scheda Congetture di Chrome DevTools con preload non riusciti visualizzati

Esegui il debug di prerender con gli altri riquadri DevTools

A differenza dei precaricamenti, le pagine sottoposte a prerendering non vengono visualizzate nei processi di rendering correnti nei riquadri di DevTools, come il riquadro Rete, perché vengono sottoposte a rendering nel proprio motore di rendering in background.

Tuttavia, ora è possibile cambiare il renderer utilizzato dai riquadri di DevTools con il menu a discesa in alto a destra oppure selezionando un URL nella parte superiore del riquadro e Ispeziona:

Chrome DevTools ora ti consente di cambiare i renderer per i quali vengono visualizzate le informazioni
Chrome DevTools ora consente di cambiare renderer per i quali vengono visualizzate le informazioni

Questo menu a discesa (e il valore selezionato) è condiviso anche in tutti gli altri riquadri, ad esempio il riquadro Rete, in cui puoi vedere che la pagina richiesta è quella pre-renderizzata:

Riquadro Rete di Chrome DevTools che mostra le richieste di rete per la pagina pre-renderizzata
Riquadro della rete di Chrome DevTools che mostra le richieste di rete per la pagina pre-renderizzata

Se esaminiamo le intestazioni HTTP di queste risorse, possiamo vedere che verranno tutte impostate con l'intestazione Sec-Purpose: prefetch;prerender:

Riquadro Rete di Chrome DevTools che mostra l&#39;intestazione Sec-Purpose per una pagina pre-renderizzata
Riquadro della rete di Chrome DevTools che mostra l'intestazione Sec-Purpose per una pagina pre-renderizzata

Oppure il riquadro Elementi, dove puoi vedere i contenuti della pagina, come nello screenshot seguente in cui vediamo l'elemento <h1> per la pagina sottoposta a prerendering:

Riquadro degli elementi di Chrome DevTools per la pagina sottoposta a prerendering
Riquadro degli elementi di Chrome DevTools per la pagina sottoposta a prerendering

In alternativa, nel riquadro della console puoi vedere i log della console emessi dalla pagina sottoposta a prerendering:

Riquadro della console di Chrome DevTools che mostra l&#39;output della console di una pagina pre-renderizzata
Riquadro della console di Chrome DevTools che mostra l'output della console di una pagina pre-renderizzata

Esegui il debug delle regole di speculazione nella pagina sottoposta a prerendering

Le sezioni precedenti descrivono come eseguire il debug delle pagine sottoposte a prerendering nella pagina che avvia il prerendering. Tuttavia, è anche possibile che le pagine sottoposte a prerendering forniscano informazioni di debug, effettuando chiamate di analisi o accedendo alla console (visualizzabile come descritto nella sezione precedente).

Inoltre, una volta che una pagina pre-renderizzata viene attivata dall'utente che la visita, la scheda Carichi speculativi mostra questo stato e indica se il pre-rendering è andato a buon fine o meno. Se non è stato possibile eseguire la previsualizzazione, viene fornita una spiegazione del motivo:

Scheda Caricamenti speculativi di Chrome DevTools che mostra una pagina pre-renderizzata riuscita e una non riuscita
Scheda Caricamenti speculativi di Chrome DevTools che mostra una pagina sottoposta a prerendering riuscito e non riuscita

Inoltre, come per i precarichi, se navighi da una pagina con regole di speculazione che non corrispondono alla pagina corrente, verrà tentato di mostrarti il motivo per cui gli URL non corrispondono a quelli coperti dalle regole di speculazione della pagina precedente nella scheda Caricamenti speculativi:

Scheda Caricamenti speculativi di Chrome DevTools che mostra la mancata corrispondenza dell&#39;URL corrente e di quelli coperti dalla pagina precedente
Chrome DevTools che mostra le mancate corrispondenze dell'URL

Conclusione

In questo post abbiamo mostrato i vari modi in cui gli sviluppatori possono eseguire il debug delle regole di speculazione di prefetch e prerendering. Il team continua a lavorare allo sviluppo di strumenti per le regole di speculazione e ci piacerebbe ricevere suggerimenti dagli sviluppatori su altri modi utili per eseguire il debug di questa nuova entusiasmante API. Invitiamo gli sviluppatori a segnalare un problema nell'Issue Tracker di Chrome per eventuali richieste di funzionalità o bug rilevati.

Ringraziamenti

Immagine di Thumbail di Nubelson Fernandes su Unsplash.