Esegui il debug delle regole di speculazione con Chrome DevTools

Le regole di speculazione possono essere utilizzate per precaricare le navigazioni nelle pagine successive e eseguirne il prerendering, come descritto nel post precedente. Ciò può consentire un caricamento delle pagine molto più rapido (o addirittura immediato), migliorando notevolmente le Core Web Vitals per queste ulteriori navigazioni nelle pagine.

Il debug delle regole di speculazione può essere complicato. Questo è particolarmente vero per le pagine sottoposte a prerendering, in quanto queste pagine vengono visualizzate in un renderer separato, in modo simile a 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 di utilizzare questi strumenti per comprendere le regole di speculazione di una pagina, perché potrebbero non funzionare e quando gli sviluppatori possono usare le opzioni DevTools più note e quando no.

Spiegazione di "pre-" termini

Ci sono molte "pre-" termini poco chiari, inizieremo con una spiegazione di questi:

  • Precaricamento: recupero di una risorsa o di un documento in anticipo per migliorare le prestazioni future. Questo post spiega il precaricamento dei documenti tramite l'API Speculation Rules anziché l'opzione <link rel="prefetch">, simile ma meno recente, spesso utilizzata per il precaricamento delle sottorisorse.
  • Prerendering: va un passo oltre il precaricamento e viene effettivamente visualizzata l'intera pagina come se l'utente l'avesse visualizzata, ma la mantiene in un processo di rendering di sfondo nascosto pronto per essere utilizzato se l'utente vi accede effettivamente. Anche in questo caso, questo documento riguarda la versione più recente dell'API Speculation Rules (API Speculation Rules), anziché la precedente opzione <link rel="prerender"> (che non esegue più un prerendering completo).
  • Speculazioni di navigazione: il termine collettivo per le nuove opzioni di precaricamento e di prerendering attivate dalle regole di speculazione.
  • Precaricamento: un termine sovraccarico 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 distinguere chiaramente questi elementi dalle "speculazioni di navigazione" termine.

Regole di speculazione per prefetch

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

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

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

Esegui il debug di prefetch regole di speculazione

I precaricamento attivati da regole di speculazione possono essere visualizzati nel riquadro Rete come gli altri recuperi:

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

Le due richieste evidenziate in rosso sono le risorse precaricate, come indicato nella colonna Type (Tipo). Questi elementi vengono recuperati con una priorità pari a Lowest perché lo sono per le 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:

Chrome DevTools precarica le intestazioni con Sec-Purpose impostato su precaricamento
Precarica le intestazioni di Chrome DevTools con Sec-Purpose impostato su precaricamento

Esegui il debug di prefetch con le schede di caricamento speculativo

È stata aggiunta una nuova sezione Caricamenti 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 di caricamento speculativo di Chrome DevTools che mostrano la regola di precaricamento

In questa sezione sono disponibili tre schede:

  • Caricamenti speculativi che elencano lo stato sottoposto a prerendering della pagina corrente.
  • Regole, in cui sono elencate tutte le serie di regole presenti nella pagina corrente.
  • Speculazioni, in cui sono elencati tutti gli URL precaricati e sottoposti a prerendering dalle serie di regole.

La scheda Speculazioni è mostrata nello screenshot precedente. Come possiamo notare, questa pagina di esempio ha un singolo insieme di regole di speculazione per il precaricamento di tre pagine. Due di questi precaricamenti sono riusciti, mentre uno non è andato a buon fine. Puoi fare clic sull'icona accanto a Serie di regole per accedere all'origine della serie di regole nel riquadro Elementi. In alternativa, puoi fare clic sul link Stato per visualizzare la scheda Speculazioni filtrata in base a quel set di regole.

La scheda Speculazioni elenca tutti gli URL di destinazione, insieme all'azione (precaricamento o prerendering), al set di regole da cui provengono (poiché potrebbero essere presenti più URL in una pagina) e allo stato di ogni speculazione:

Scheda Speculazioni di Chrome DevTools che mostra gli URL precaricati e il relativo stato
Scheda Speculazioni di Chrome DevTools che mostra gli URL precaricati e il relativo stato

Sopra gli URL, è possibile utilizzare un menu a discesa per visualizzare gli URL di tutte le serie di regole o solo gli URL di una determinata serie di regole. Al di sotto sono elencati tutti gli URL. Facendo clic su un URL ottieni 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 di riepilogo Caricamenti speculativi mostra un report Stato di caricamento speculativo per questa pagina per indicare se per la pagina è stato utilizzato un precaricamento o un prerendering.

Per una pagina precaricata, dovresti vedere un messaggio di operazione riuscita quando accedi alla pagina in questione:

Scheda Caricamenti speculativi di Chrome DevTools che mostra un precaricamento riuscito
Scheda Caricamenti speculativi di Chrome DevTools che mostra un precaricamento riuscito

Speculazioni senza corrispondenza

Quando si effettua una navigazione da una pagina con regole di speculazione che non comporta l'utilizzo di un precaricamento o di un prerendering, un'ulteriore sezione della scheda mostrerà ulteriori dettagli sul motivo per cui l'URL non corrisponde a nessuno degli URL di speculazione. Ciò è utile per individuare gli errori di battitura nelle regole di speculazione.

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

Ad esempio, qui abbiamo raggiunto next4.html, ma solo next.html, next2.html o next3.html sono precaricamenti, quindi vediamo che non corrispondono del tutto a nessuna di queste tre regole.

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

Per quanto riguarda i precaricamento stessi, il riquadro Rete è probabilmente una posizione più familiare. Per l'esempio di errore di precaricamento, puoi vedere il codice 404 relativo al precaricamento qui:

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

Tuttavia, le schede Caricamenti speculativi diventano molto più utili per le regole di speculazione di 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). Ciò può fornire un'esperienza di caricamento istantaneo, ma con costi aggiuntivi in termini di risorse.

A differenza dei precaricamento, tuttavia, questi non sono disponibili nel riquadro Rete, poiché vengono recuperati e visualizzati in un processo di rendering separato in Chrome. Ciò rende le schede Caricamenti speculativi più importanti per il debug delle regole di speculazione di prerendering.

Esegui il debug di prerender con le schede per i caricamenti speculativi

Per le regole di speculazione di prerendering possono essere utilizzate le stesse schermate di caricamenti speculativi, come dimostrato da una pagina demo simile che tenta di eseguire il prerendering, invece di precaricare le tre pagine:

Chrome DevTools speculativo carica le schede per una pagina con regole di speculazione di prerendering
Chrome DevTools carica le schede speculative per una pagina con regole di speculazione di prerendering

Vediamo ancora una volta che il prerendering di uno dei tre URL non è riuscito e gli sviluppatori possono ottenere i dettagli per URL nella scheda Speculazioni facendo clic sul link 2 Ready, 1 Failure.

In Chrome 121 abbiamo lanciato il supporto delle regole dei documenti. In questo modo il browser può recuperarli dagli stessi link di origine presenti 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>

In questo esempio vengono selezionati tutti i link di origine, tranne quelli che iniziano con /not-safe-to-prerender come candidati di prerendering.

Imposta inoltre il prerendering eagerness su moderate, il che significa che le navigazioni vengono sottoposte a prerendering quando passi il mouse o fai clic sul link.

Esistono regole simili come questa sul sito dimostrativo delle regole speculative e l'utilizzo della nuova sezione Caricamenti speculativi su questo sito mostra l'utilità di questa nuova scheda poiché sono elencati tutti gli URL idonei trovati dal browser nella pagina:

Scheda Speculazioni 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 è iniziato. Tuttavia, quando manteniamo il puntatore sui link, notiamo che lo stato cambia man mano che viene eseguito il prerendering di ogni URL:

Scheda Speculazioni di Chrome DevTools con pagine sottoposte a prerendering attivate
Scheda Speculazioni di Chrome DevTools con pagine sottoposte a prerendering attivate

Chrome ha impostato dei limiti per i prerendering, incluso un massimo di 2 prerendering per l'entusiasmo moderate. Pertanto, dopo aver passato il mouse sopra il terzo link, vediamo il motivo dell'errore dell'URL:

Scheda Speculazioni di Chrome DevTools in cui sono visualizzati precaricamenti non riusciti
Scheda Speculazioni di Chrome DevTools in cui sono visualizzati i precaricamenti non riusciti

Esegui il debug di prerender con gli altri riquadri DevTools

A differenza dei precaricamento, le pagine di cui è stato eseguito il prerendering non vengono visualizzate nei processi di rendering correnti nei riquadri DevTools come il riquadro Network, perché vengono visualizzate nel proprio renderer dietro le quinte.

Tuttavia, ora è possibile cambiare il renderer utilizzato dai riquadri DevTools tramite il menu a discesa nell'angolo in alto a destra o selezionando un URL nella parte superiore del riquadro e selezionando Ispeziona:

Chrome DevTools ora ti consente di cambiare 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 tra tutti gli altri riquadri, come il riquadro Network, dove puoi vedere che la pagina richiesta è quella sottoposta a prerendering:

Riquadro Rete di Chrome DevTools che mostra le richieste di rete per la pagina sottoposta a prerendering
Riquadro Rete di Chrome DevTools che mostra le richieste di rete per la pagina sottoposta a prerendering

Dando un'occhiata alle intestazioni HTTP di queste risorse, possiamo vedere che sono tutte impostate con l'intestazione Sec-Purpose: prefetch;prerender:

Riquadro Network (Rete) di Chrome DevTools che mostra l&#39;intestazione Sec-Purpose per una pagina sottoposta a prerendering
Riquadro Network di Chrome DevTools che mostra l'intestazione Sec-Purpose per una pagina sottoposta a prerendering

Oppure il riquadro Elementi, dove puoi vedere i contenuti della pagina, come nello screenshot seguente in cui vediamo che 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 da una pagina sottoposta a prerendering
Riquadro della console di Chrome DevTools che mostra l'output della console da una pagina sottoposta a prerendering

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, quando l'utente attiva una pagina sottoposta a prerendering, la scheda Caricamenti speculativi mostra questo stato e indica se il prerendering è stato eseguito correttamente o meno. Se non è stato possibile eseguire il prerendering, viene fornita una spiegazione sul motivo:

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

Inoltre, come nel caso dei precaricamenti, la navigazione da una pagina con regole di speculazione che non corrispondevano alla pagina corrente tenterà di mostrare perché gli URL non corrispondevano a quelli descritti nelle regole di speculazione della pagina precedente nella scheda Caricamenti speculativi:

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

Conclusione

In questo post abbiamo mostrato i vari modi in cui gli sviluppatori possono eseguire il debug delle regole di speculazione di precaricamento e di prerendering. Il team continua a lavorare agli strumenti per le regole di speculazione e vorremmo ricevere suggerimenti dagli sviluppatori su quali altri modi potrebbero essere utili per eseguire il debug di questa nuova entusiasmante API. Invitiamo gli sviluppatori a segnalare un problema tramite lo Issue Tracker di Chrome per eventuali richieste di funzionalità o bug rilevati.

Ringraziamenti

Immagine di Thumbail di Nubelson Fernandes su Unsplash.