Depura las reglas de especulación con las Herramientas para desarrolladores de Chrome

Las reglas de especulación se pueden usar para cargar y renderizar de forma previa las navegaciones de la página siguiente, como se detalla en la publicación anterior. Esto puede permitir cargas de páginas mucho más rápidas, o incluso instantáneas, lo que mejora en gran medida las Métricas web esenciales para estas navegaciones de páginas adicionales.

Depurar reglas de especulación puede ser complicado. Esto es especialmente cierto para las páginas renderizadas previamente, ya que se renderizan en un renderizador independiente, algo así como una pestaña en segundo plano oculta que reemplaza la pestaña actual cuando se activa. Por lo tanto, las opciones habituales de Herramientas para desarrolladores no siempre se pueden usar para depurar problemas.

El equipo de Chrome ha estado trabajando arduamente para mejorar la compatibilidad de las Herramientas para desarrolladores con la depuración de reglas de especulación. En esta publicación, verás todas las formas de usar estas herramientas para comprender las reglas de especulación de una página, por qué es posible que no funcionen y cuándo los desarrolladores pueden usar las opciones más conocidas de Herramientas para desarrolladores, y cuándo no.

Explicación de los términos que comienzan con "pre"

Hay muchos términos que incluyen el prefijo "pre" que son confusos, por lo que comenzaremos con una explicación de estos:

  • Recuperación previa: Recuperar un recurso o documento por adelantado para mejorar el rendimiento futuro. En esta entrada, se explica cómo realizar la recuperación previa de documentos con la API de Speculation Rules, en lugar de la opción <link rel="prefetch"> similar, pero más antigua, que se suele usar para la recuperación previa de recursos secundarios.
  • Renderización previa: Va un paso más allá de la recuperación previa y renderiza toda la página como si el usuario hubiera navegado a ella, pero la mantiene en un proceso de renderización en segundo plano oculto listo para usarse si el usuario realmente navega allí. Una vez más, este documento se centra en la versión más reciente de la API de Speculation Rules, en lugar de la opción <link rel="prerender"> anterior (que ya no realiza una renderización previa completa).
  • Navegaciones especulativas: Es el término colectivo para las nuevas opciones de carga previa y renderización previa que se activan con las reglas de especulación.
  • Precarga: Es un término sobrecargado que puede hacer referencia a varias tecnologías y procesos, incluidos <link rel="preload">, el analizador de precarga y la precarga de navegación de Service Worker. Estos elementos no se abordarán aquí, pero el término se incluye para diferenciar claramente aquellos del término "navegaciones especulativas".

Reglas de especulación para prefetch

Las reglas de especulación se pueden usar para obtener previamente el documento de la siguiente navegación. Por ejemplo, cuando se inserta el siguiente JSON en una página, se realizará la recuperación previa de next.html y next2.html:

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

Usar reglas de especulación para la recuperación previa de navegación tiene algunas ventajas sobre la sintaxis <link rel="prefetch"> anterior, como una API más expresiva y el almacenamiento de los resultados en la caché de memoria en lugar de la caché de disco HTTP.

Cómo depurar reglas de especulación de prefetch

Las recuperaciones previas activadas por reglas de especulación se pueden ver en el panel Network de la misma manera que otras recuperaciones:

Panel de red en Herramientas para desarrolladores de Chrome que muestra documentos obtenidos previamente
Panel de red en las Herramientas para desarrolladores de Chrome que muestra documentos prefetchados

Las dos solicitudes destacadas en rojo son los recursos obtenidos previamente, como se puede ver en la columna Tipo. Estos se recuperan con prioridad Lowest, ya que son para navegaciones futuras, y Chrome prioriza los recursos de la página actual.

Si haces clic en una de las filas, también se muestra el encabezado HTTP Sec-Purpose: prefetch, que es la forma en que se pueden identificar estas solicitudes en el servidor:

Encabezados de la recuperación previa de las Herramientas para desarrolladores de Chrome con Sec-Purpose establecido en prefetch
Encabezados de recuperación previa de las Herramientas para desarrolladores de Chrome con Sec-Purpose establecido en prefetch

Depura prefetch con las pestañas de carga especulativa

Se agregó una nueva sección Cargas especulativas en el panel Aplicación de Chrome DevTools, en la sección Servicios en segundo plano, para ayudar a depurar las reglas de especulación:

Pestañas de carga especulativa de Herramientas para desarrolladores de Chrome que muestran la regla de recuperación previa
Pestañas de carga especulativa de las Herramientas para desarrolladores de Chrome que muestran la regla de obtención previa

En esta sección, hay tres pestañas disponibles:

  • Cargas especulativas, que muestra el estado de procesamiento previo de la página actual
  • Reglas, que enumera todos los conjuntos de reglas que se encuentran en la página actual, designados como URLs o etiquetas de reglas, si hay alguno.
  • Especulaciones, que enumera todas las URLs que se obtuvieron previamente y se renderizaron previamente de los conjuntos de reglas.

En la captura de pantalla anterior, se muestra la pestaña Speculations, y podemos ver que esta página de ejemplo tiene un solo conjunto de reglas de especulación para la recuperación previa de 3 páginas. Dos de esas recuperaciones previas se completaron correctamente y una falló. Se puede hacer clic en el ícono que se encuentra junto a Conjunto de reglas para dirigirte a la fuente del conjunto de reglas en el panel Elements. Como alternativa, puedes hacer clic en el vínculo Estado para ir a la pestaña Especulaciones filtrada según ese conjunto de reglas.

En la pestaña Speculations, se enumeran todas las URLs de destino, junto con la acción (obtención previa o renderización previa), el conjunto de reglas del que provienen (ya que puede haber varios en una página) y el estado de cada especulación:

La pestaña Especulaciones de Herramientas para desarrolladores de Chrome que muestra URLs prefetch junto con su estado
Pestaña Speculations de las Herramientas para desarrolladores de Chrome que muestra las URLs obtenidas previamente junto con su estado

Sobre las URLs, se puede usar un menú desplegable para mostrar las URLs de todos los conjuntos de reglas o solo las de un conjunto de reglas en particular. Debajo, se enumeran todas las URLs. Si haces clic en una URL, obtendrás información más detallada.

En esta captura de pantalla, podemos ver el motivo del error de la página next3.html (que no existe y, por lo tanto, devuelve un error 404, que es un código de estado HTTP que no es 2xx).

En la pestaña de resumen, Cargas especulativas, se muestra un informe de Estado de carga especulativa de esta página para indicar si se usó la carga previa o la renderización previa para esta página.

En el caso de una página precargada, deberías ver un mensaje de confirmación cuando se navegue a esa página:

La pestaña Cargas especulativas de Herramientas para desarrolladores de Chrome que muestra una recuperación previa exitosa
Pestaña Cargas especulativas de Herramientas para desarrolladores de Chrome que muestra una recuperación previa exitosa

Especulaciones sin coincidencias

Cuando se produce una navegación desde una página con reglas de especulación que no genera una carga previa o una renderización previa, una sección adicional de la pestaña mostrará más detalles sobre por qué la URL no coincidió con ninguna de las URLs de especulación. Esto es útil para detectar errores de escritura en tus reglas de especulación.

Pestaña Cargas especulativas de Herramientas para desarrolladores de Chrome, que muestra cómo la URL actual no coincidió con ninguna de las URLs en las reglas de especulación de la página anterior
Las URLs no coincidentes se destacan en Herramientas para desarrolladores

Por ejemplo, aquí navegamos a next4.html, pero solo next.html, next2.html o next3.html son búsquedas previas, por lo que podemos ver que no coincide con ninguna de esas tres reglas.

Las pestañas Cargas especulativas son muy útiles para depurar las reglas de especulación y encontrar errores de sintaxis en el JSON.

En cuanto a las recuperaciones anticipadas, es probable que el panel Network sea un lugar más familiar. En el ejemplo de falla de la recuperación previa, puedes ver el error 404 de la recuperación previa aquí:

Panel de red de Herramientas para desarrolladores de Chrome que muestra una recuperación previa fallida
Panel de red de las Herramientas para desarrolladores de Chrome que muestra una recuperación previa fallida

Sin embargo, las pestañas de Cargas especulativas se vuelven mucho más útiles para las reglas de especulación de renderización previa, que se explican a continuación.

Reglas de especulación para prerender

Las reglas de especulación de la renderización previa siguen la misma sintaxis que las reglas de especulación de la carga previa. Por ejemplo:

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

Este conjunto de reglas activa una carga y renderización completas de las páginas especificadas (sujeto a ciertas restricciones). Esto puede proporcionar una experiencia de carga instantánea, aunque con costos de recursos adicionales.

Sin embargo, a diferencia de las búsquedas previas, no se pueden ver en el panel Network, ya que se recuperan y renderizan en un proceso de renderización independiente en Chrome. Esto hace que las pestañas de Cargas especulativas sean más importantes para depurar las reglas de especulación de la renderización previa.

Depura prerender con las pestañas Cargas especulativas

Las mismas pantallas de Cargas especulativas se pueden usar para las reglas de especulación de renderización previa, como se demostró con una página de demostración similar que intenta renderizar previamente, en lugar de realizar una recuperación previa de las tres páginas:

Pestañas de cargas especulativas de las Herramientas para desarrolladores de Chrome para una página con reglas de especulación de renderización previa
Las pestañas de cargas especulativas de Herramientas para desarrolladores de Chrome para una página con reglas de especulación de renderización previa

Aquí vemos nuevamente que una de las tres URLs no se pudo generar previamente, y los desarrolladores pueden obtener los detalles por URL en la pestaña Speculations haciendo clic en el vínculo 2 Ready, 1 Failure.

En Chrome 121, lanzamos la compatibilidad con las reglas de documentos. Esto permite que el navegador los obtenga de los vínculos del mismo origen en la página, en lugar de enumerar un conjunto específico de URLs:

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

En este ejemplo, se seleccionan todos los vínculos del mismo origen, excepto los que comienzan con /not-safe-to-prerender como candidatos para la renderización previa.

También establece el parámetro de configuración previo eagerness en moderate, lo que significa que las navegaciones se renderizan previamente cuando se coloca el cursor sobre el vínculo o se hace clic en él.

En el sitio de demostración de reglas especulativas, hay reglas similares a esta, y usar la nueva sección Cargas especulativas en este sitio muestra la utilidad de esta nueva pestaña, ya que se enumeran todas las URLs aptas que el navegador encontró en la página:

Pestaña Speculations de Herramientas para desarrolladores de Chrome con varias URLs que no se activaron
Pestaña Speculations de Herramientas para desarrolladores de Chrome con varias URLs que no se activaron

El Estado es No activado, ya que no se inició el proceso de renderización previa para estos elementos. Sin embargo, a medida que mantenemos el puntero sobre los vínculos, vemos cómo cambia el estado a medida que se realiza la renderización previa de cada URL:

La pestaña Especulaciones de Herramientas para desarrolladores de Chrome con páginas activadas previamente renderizadas
Pestaña Especulaciones de Herramientas para desarrolladores de Chrome con páginas activadas para la renderización previa

Chrome estableció límites en la generación previa, incluido un máximo de 2 generaciones previas para la urgencia moderate, por lo que, después de colocar el cursor sobre el tercer vínculo, vemos el motivo del error para esa URL:

Pestaña Especulaciones de Herramientas para desarrolladores de Chrome que muestra precargas fallidas
Pestaña Speculations de Herramientas para desarrolladores de Chrome que muestra las cargas previas fallidas

Depura prerender con los otros paneles de DevTools

A diferencia de la recuperación previa, las páginas que se renderizaron previamente no aparecerán en los procesos de renderización actuales en los paneles de Herramientas para desarrolladores, como el panel Network, ya que se renderizan en su propio renderizador en segundo plano.

Sin embargo, ahora es posible cambiar el renderizador que usan los paneles de Herramientas para desarrolladores con el menú desplegable de la esquina superior derecha o seleccionando una URL en la parte superior del panel y seleccionando Inspeccionar:

Las Herramientas para desarrolladores de Chrome ahora te permiten cambiar los renderizadores para los que se muestra la información.
Las Herramientas para desarrolladores de Chrome ahora te permiten cambiar los renderizadores para los que se muestra la información

Este menú desplegable (y el valor seleccionado) también se comparte en todos los demás paneles, como el panel Network, en el que puedes ver que la página que se solicita es la que se generó previamente:

Panel de red de Herramientas para desarrolladores de Chrome que muestra las solicitudes de red de la página renderizada previamente
Panel de red de las Herramientas para desarrolladores de Chrome que muestra las solicitudes de red de la página renderizada previamente

Si observamos los encabezados HTTP de estos recursos, podemos ver que todos se establecerán con el encabezado Sec-Purpose: prefetch;prerender:

Panel de red de Herramientas para desarrolladores de Chrome que muestra el encabezado Sec-Purpose para una página renderizada previamente
Panel de red de las Herramientas para desarrolladores de Chrome que muestra el encabezado Sec-Purpose para una página renderizada previamente

O el panel Elements, en el que puedes ver el contenido de la página, como en la siguiente captura de pantalla, en la que vemos que el elemento <h1> es para la página renderizada previamente:

Panel Elements de las Herramientas para desarrolladores de Chrome para la página renderizada previamente
Panel Elements de las Herramientas para desarrolladores de Chrome para la página renderizada previamente

O el panel de la consola, en el que puedes ver los registros de la consola que emite la página renderizada previamente:

Panel de la consola de Herramientas para desarrolladores de Chrome que muestra el resultado de la consola de una página renderizada previamente
Panel de la consola de Herramientas para desarrolladores de Chrome que muestra el resultado de la consola de una página renderizada previamente

Cómo depurar reglas de especulación en la página renderizada previamente

En las secciones anteriores, se explica cómo depurar las páginas renderizadas previamente en la página que inicia la renderización previa. Sin embargo, también es posible que las páginas renderizadas previamente proporcionen información de depuración, ya sea realizando llamadas de Analytics o registrando datos en la consola (que se puede ver como se describe en la sección anterior).

Además, una vez que el usuario activa una página renderizada previamente navegando a ella, la pestaña Cargas especulativas mostrará este estado y si se renderizó previamente correctamente o no. Si no se pudo realizar la renderización previa, se proporciona una explicación del motivo:

La pestaña Cargas especulativas de Herramientas para desarrolladores de Chrome que muestra una página renderizada previamente correcta y una incorrecta
Pestaña Cargas especulativas de Herramientas para desarrolladores de Chrome que muestra una página renderizada previamente de forma correcta y otra fallida

Además, al igual que en el caso de las cargas previas, si navegas desde una página con reglas de especulación que no coincidieron con la página actual, se intentará mostrarte por qué las URLs no coincidieron con las que se abarcaron en las reglas de especulación de la página anterior en la pestaña Cargas especulativas:

La pestaña Cargas especulativas de Herramientas para desarrolladores de Chrome que muestra la falta de coincidencia de la URL actual y las que abarca la página anterior
Herramientas para desarrolladores de Chrome que muestran las discrepancias de URL

Conclusión

En esta publicación, mostramos las diversas formas en que los desarrolladores pueden depurar las reglas de especulación de carga previa y renderización previa. El equipo sigue trabajando en las herramientas para las reglas de especulación, y nos encantaría recibir sugerencias de los desarrolladores sobre otras formas que serían útiles para depurar esta nueva y emocionante API. Recomendamos a los desarrolladores que creen un problema en la herramienta de seguimiento de errores de Chrome para cualquier solicitud de función o error que detecten.

Agradecimientos

Imagen en miniatura de Nubelson Fernandes en Unsplash.