Cómo depurar reglas de especulación

Las reglas de especulación se pueden usar para precargar y renderizar previamente las navegaciones de la página siguiente, como se detalla en la entrada anterior. Esto puede permitir que la página se cargue mucho más rápido, o incluso de forma instantánea, lo que mejora considerablemente las Métricas web esenciales para estas navegaciones de páginas adicionales.

La depuración de las reglas de especulación puede ser complicado. Esto es particularmente cierto para las páginas renderizadas previamente, ya que estas se renderizan en un procesador independiente, como una pestaña de fondo 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 Herramientas para desarrolladores con la depuración de reglas de especulación. En esta publicación, verás todas las maneras diferentes de usar estas herramientas para comprender las reglas de especulación de una página, por qué podrían no funcionar 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 “anteriores”

Existen muchos términos "previos" que se confunden fácilmente, así que comencemos con una explicación de ellos:

  • Recuperación previa: Recuperación de un recurso o documento por adelantado para mejorar el rendimiento futuro. En esta entrada, se explica la carga previa de documentos con la API de Speculation Rules, en lugar de la opción <link rel="prefetch"> similar, pero antigua, que a menudo se utiliza para cargar recursos de forma previa.
  • Renderización previa: Este proceso va un paso más allá de la carga previa y, de hecho, procesa toda la página como si el usuario la hubiera navegado, pero la mantiene en un proceso oculto en segundo plano listo para usarse si el usuario realmente navega hacia allí. Una vez más, este documento se refiere a la versión más reciente de la API de Speculation Rules, en lugar de a la opción <link rel="prerender"> anterior (que ya no realiza una renderización previa completa).
  • Especulaciones de navegación: El término colectivo para las nuevas opciones de carga previa y renderización previa que se activan mediante las reglas de especulación.
  • Precarga: Término sobrecargado que puede hacer referencia a una serie de tecnologías y procesos, como <link rel="preload">, el análisis de precarga y las precargas de navegación de service worker. Estos elementos no se tratarán aquí, pero el término se incluye para diferenciarlos claramente del término "especulaciones de navegación".

Reglas de especulación para prefetch

Se pueden usar reglas de especulación para cargar previamente el documento de navegación siguiente. Por ejemplo, cuando se inserta el siguiente JSON en una página, se cargarán previamente next.html y next2.html:

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

El uso de reglas de especulación para las cargas previas de navegación tiene algunas ventajas en comparación con la sintaxis <link rel="prefetch"> anterior, como una API más expresiva y el almacenamiento de los resultados en la memoria caché en lugar de la caché del disco HTTP.

Depurando prefetch reglas de especulación

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

Panel de red de Herramientas para desarrolladores de Chrome que muestra los documentos cargados previamente

Las dos solicitudes destacadas en rojo son los recursos cargados previamente, como se puede ver en la columna Type. Estos se recuperan con prioridad Lowest, tal como lo hacen en las navegaciones futuras, y Chrome prioriza los recursos de la página actual.

Cuando 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 carga previa de las Herramientas para desarrolladores de Chrome con Sec-Propósito configurado para carga previa

Depura prefetch con las pestañas Carga especulativa

Se agregó una nueva sección Cargas especulativas al panel Application de las Herramientas para desarrolladores de Chrome, en la sección Servicios en segundo plano, para ayudar con la depuración de reglas de especulación:

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

Hay tres pestañas disponibles en esta sección:

  • Cargas especulativas, que enumeran el estado renderizado previamente de la página actual
  • Reglas, que enumera todos los conjuntos de reglas encontrados en la página actual.
  • Speculations, que enumera todas las URLs precargadas y renderizadas previamente de los conjuntos de reglas.

La pestaña Speculations se muestra en la captura de pantalla anterior y podemos ver que esta página de ejemplo tiene un solo conjunto de reglas de especulación para precargar 3 páginas. Dos de esas cargas previas se realizaron correctamente y una falló. Puedes hacer clic en el ícono junto al Conjunto de reglas para ir a la fuente del conjunto de reglas en el panel Elementos. También se puede hacer clic en el vínculo Status para ir a la pestaña Speculations filtrada de ese conjunto de reglas.

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

La pestaña Especulaciones de Herramientas para desarrolladores de Chrome que muestra las URLs precargadas junto con su estado

Arriba de las URLs, se puede utilizar un menú desplegable para mostrar las URLs de todos los conjuntos de reglas o solo las de un conjunto de reglas 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 de la falla de la página next3.html (que no existe y, por lo tanto, muestra 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 para esta página que muestra si se usó o no una carga previa o una renderización previa para esta página.

En el caso de una página con carga previa, deberías ver un mensaje de éxito cuando se navega por esa página:

Pestaña Cargas especulativas de las Herramientas para desarrolladores de Chrome que muestra una carga previa exitosa

Especulaciones sin coincidencias

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

Pestaña de cargas especulativas de las Herramientas para desarrolladores de Chrome que muestra cómo la URL actual no coincide con ninguna de las URLs de las reglas de especulación de la página anterior

Por ejemplo, aquí navegamos a next4.html, pero solo next.html, next2.html o next3.html son cargas previas, por lo que podemos ver que no coincide exactamente 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 cargas previas, es probable que el panel Network sea un lugar más familiar. Para el ejemplo de error de carga previa, puedes ver aquí el error 404 de la carga previa:

El panel Network de las Herramientas para desarrolladores de Chrome muestra una carga previa con errores.

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

Reglas de especulación para prerender

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

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

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

Sin embargo, a diferencia de las cargas previas, estas no están disponibles en el panel Network, ya que se recuperan y procesan en un proceso de renderización independiente en Chrome. Esto hace que las pestañas Cargas especulativas sean más importantes para depurar las reglas de especulación de renderización previa.

Depura prerender con las pestañas de cargas especulativas

Se pueden usar las mismas pantallas de cargas especulativas para las reglas de especulación de renderización previa, como se muestra con una página de demostración similar que intenta realizar la renderización previa, en lugar de cargar previamente las tres páginas:

La versión especulativa de las Herramientas para desarrolladores de Chrome carga pestañas de una página con reglas de especulación de renderización previa

Aquí vemos una vez más que una de las tres URLs no se pudo renderizar previamente y los desarrolladores pueden obtener los detalles de cada 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 detecte estos 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 mismos vínculos de origen, excepto los que comienzan con /not-safe-to-prerender como candidatos de renderización previa.

También establece la renderización previa de 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.

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

Pestaña de especulaciones de las Herramientas para desarrolladores de Chrome con varias URLs no activadas

El estado Status es Not trigger, ya que no se inició el proceso de renderización previa. Sin embargo, cuando colocamos el cursor sobre los vínculos, vemos el cambio de estado a medida que se renderiza previamente cada URL:

Pestaña de especulaciones de las Herramientas para desarrolladores de Chrome con las páginas renderizadas previamente activadas

Chrome estableció límites para las renderizaciones previas, lo que incluye un máximo de 2 renderizaciones previas para el campo moderate, por lo que, después de colocar el cursor sobre el tercer vínculo, verás el motivo de la falla de esa URL:

Pestaña de especulaciones de Herramientas para desarrolladores de Chrome con las precargas fallidas que aparecen

Depura prerender con los otros paneles de Herramientas para desarrolladores

A diferencia de las cargas previas, las páginas que se renderizaron previamente no se mostrarán en los procesos de renderización actuales en los paneles de Herramientas para desarrolladores, como el panel Network, porque se renderizan en su propio procesador detrás de escena.

Sin embargo, ahora es posible cambiar el procesador que usan los paneles de Herramientas para desarrolladores con el menú desplegable de la parte 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 procesadores a 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 en el panel Network, en el que puedes ver que la página que se solicita es la que se está renderizando previamente:

El panel Network de las Herramientas para desarrolladores de Chrome muestra las solicitudes de red de la página renderizada previamente

Si observamos los encabezados HTTP de estos recursos, vemos que se configurarán con el encabezado Sec-Purpose: prefetch;prerender:

El panel Network de las Herramientas para desarrolladores de Chrome muestra el encabezado Sec-Propósito de una página renderizada previamente

O bien, en el panel Elements, donde 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

También puedes ir al panel de la consola, donde puedes ver los registros de la consola que emite la página renderizada previamente:

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

Depura las reglas de especulación en la página renderizada previamente

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

Además, una vez que el usuario que navega hacia ella activa una página renderizada previamente, la pestaña Cargas especulativas mostrará este estado y indicará si se renderizó previamente o no. Si no se pudo renderizar previamente, se proporciona una explicación de por qué ese fue el caso:

Pestaña de Cargas especulativas de las Herramientas para desarrolladores de Chrome que muestra una página renderizada previamente de forma correcta y con errores

Además, como sucede con las cargas previas, si navegas desde una página con reglas de especulación que no coinciden con la página actual, se intentará mostrarte por qué las URLs no coinciden con las que se indicaron en las reglas de especulación de la página anterior en la pestaña Cargas especulativas:

Pestaña de cargas especulativas de las Herramientas para desarrolladores de Chrome que muestra la discrepancia de la URL actual y las que se abordan en la página anterior

Conclusión

En esta publicación, mostramos las distintas formas en que los desarrolladores pueden depurar reglas de especulación de precarga y renderización previa. El equipo continúa trabajando en herramientas para reglas de especulación, y nos encantaría recibir sugerencias de los desarrolladores sobre qué otras formas serían útiles para depurar esta emocionante API nueva. Alentamos a los desarrolladores a informar problemas en la Herramienta de seguimiento de errores de Chrome para solicitar funciones o detectar errores.

Agradecimientos

Imagen de pulgar de Nubelson Fernandes en Unsplash.