Speculation Rules: límites de prefetch y prerender
Compara la elegibilidad, activación, abandono, credenciales, efectos secundarios y un fixture seguro de Speculation Rules.
BotBrowser Team
Quieres la documentación estructurada de Plataforma?
Este artículo forma parte de la biblioteca editorial. Para pasos de configuración, material de referencia y actualizaciones continuas, entra en la sección de docs.
BotBrowser puede repetir un contexto autorizado y registrar resultados visibles de navegación, pero no afirma habilitar, forzar ni medir el soporte de Speculation Rules en una versión concreta. La decisión práctica es más precisa: usar prefetch cuando una navegación futura pueda descargar una respuesta sin riesgo, y usar prerender solo cuando el documento oculto pueda crearse, activarse o abandonarse sin trabajo no deseado. El navegador decide la elegibilidad y el ciclo de vida; la aplicación aporta la sugerencia y un retroceso seguro.
TL;DR
prefetchprepara una respuesta posible;prerendercrea un documento oculto que podría activarse. Ninguna sugerencia garantiza que el navegador descargue o renderice el destino.- La elegibilidad depende de la regla, URL, origen, política, condiciones del dispositivo y la implementación. Una regla coincidente no demuestra que hubo una petición.
- La activación convierte el documento especulativo en documento visible. El abandono puede ocurrir antes, por lo que la inicialización debe tolerar un documento que nunca se muestra.
- Cookies, credenciales, almacenamiento, analítica, medios, WebSockets y escrituras son límites de efectos secundarios. Mantén los destinos de solo lectura y confirma la activación antes de cambiar estado.
- Un fixture sintético puede registrar entrada, intención de petición, activación y abandono sin afirmar que se ejecutó en un navegador real.
Contents
- Prefetch y prerender no prometen lo mismo
- La elegibilidad la decide el navegador
- Activación y abandono forman un ciclo
- Credenciales, efectos secundarios y privacidad
- Fixture copiable y registro acotado
- Elige el retroceso según el límite observado
- Límite de capacidad de BotBrowser
- Conclusión práctica
Prefetch y prerender no prometen lo mismo
La API Speculation Rules en MDN define un formato JSON para describir navegaciones probables. El navegador puede usarlo para descargar un destino o construir un documento oculto. La página no recibe un resultado síncrono que confirme la aceptación y una regla no convierte un enlace normal en una navegación templada garantizada.
prefetch es una promesa pequeña: el navegador puede recuperar un recurso para una navegación posterior y conservarlo en su caché interno. El documento no se vuelve activo solo porque se hayan recibido bytes. Una navegación posterior puede no reutilizarlo si cambian URL, cabeceras, política, credenciales o estado del navegador.
prerender puede crear un contexto oculto, cargar el documento y ejecutar inicialización limitada antes de activarlo. La documentación de Chrome sobre prerender describe la posibilidad de activar o descartar esa página. No es una segunda pestaña visible ni un trabajador de fondo con permiso para iniciar operaciones irreversibles.
| Sugerencia | Lo que puede hacer el navegador | Suposición permitida | Destino más seguro |
|---|---|---|---|
prefetch | Descargar un recurso candidato | Nada hasta la navegación real | Documento cacheable y de solo lectura |
prerender | Construir un documento oculto | Puede nunca ser visible | Shell de solo lectura con escrituras diferidas |
| Sin sugerencia | Navegar cuando la persona lo pide | Ciclo normal de navegación | Flujo con intención explícita |
Prefetch consume sobre todo red y caché; prerender también consume CPU, memoria, lecturas de almacenamiento e inicialización. Evita prerender para compras, sockets, correos, tokens de un solo uso o cualquier GET que cambie estado. El artículo sobre medición de rendimiento del navegador ayuda a separar una marca temporal de una activación: una marca en un documento oculto no demuestra una visita.
La elegibilidad la decide el navegador
La especificación WICG de Speculation Rules define la forma de la regla y las condiciones que el agente de usuario considera. Un ejemplo puede indicar URLs con href_matches, selectores y un nivel de avidez. Es una entrada al algoritmo, no una orden imperativa ni un informe completo del motivo por el que se omitió un candidato.
<script type="speculationrules">
{
"prefetch": [
{
"where": { "href_matches": "/docs/*" },
"eagerness": "moderate"
}
],
"prerender": [
{
"where": { "selector_matches": "a[data-prerender]" },
"eagerness": "conservative"
}
]
}
</script>
Una coincidencia sintáctica no asegura petición. Pueden excluirse enlaces, una política puede impedir la especulación, la presión de recursos puede reducir la avidez y una implementación puede admitir solo parte de la sintaxis. Una respuesta especulativa también puede invalidarse por DNS, TLS, redirecciones o cambio de estado.
Registra la elegibilidad como límite, no como atributo de una persona: fuente de regla, clase de URL, origen, cabeceras, versión del navegador, condiciones de conexión y retroceso esperado. El artículo de historial y privacidad de Navigation API recuerda que ver una URL no prueba que alguien visitó el destino. La guía de contextos seguros añade la comprobación previa antes de solicitar una función potente. La analítica debe depender de activación, no de una petición aislada.
Activación y abandono forman un ciclo
Usa cuatro estados: declarado, elegible, activado y abandonado. Declarado significa que la página aportó JSON; elegible significa que el navegador aceptó considerarlo, no que haya descargado; activado significa navegación visible; abandonado significa descartado, expirado o reemplazado sin activación.
La activación es el punto para analítica, personalización persistente, reservas, mutaciones y embeds de terceros. El abandono es normal: puede cambiar el enlace, cerrarse la página, perderse la red o llegar una nueva regla. Limpia temporizadores y manejadores de forma idempotente, sin mostrar un error de usuario para un candidato que nunca fue visible.
| Estado | Evidencia que puede conservar un fixture | Interpretación insegura |
|---|---|---|
| Declarado | Huella de JSON y clase de URL | El navegador aceptó la regla |
| Elegible | Diagnóstico del navegador, si existe | La petición ocurrió |
| Activado | Navegación visible o evento de aplicación | Toda inicialización ocurrió una sola vez |
| Abandonado | Descartado o vencido | La persona rechazó el destino |
Las carreras son posibles: limpieza y activación pueden reordenarse, y un servidor puede recibir una petición antes de que la interfaz sepa si hubo activación. Usa un identificador sintético de fixture, nunca una cuenta, cookie o URL secreta. Si intervienen workers o service workers, prueba por separado la fase oculta y la visible; conserva contenido esencial aunque no exista una señal de activación portable.
Credenciales, efectos secundarios y privacidad
Cookies, caché, cabeceras de autorización, client hints, referrer policy y service workers pueden cambiar lo que recibe el destino. La combinación exacta depende de origen, política, modo de credenciales y navegador. Un fixture nunca debe necesitar una cookie real ni un token de producción.
Separa rutas de lectura y escritura. Un shell público y cacheable es más apto para especulación que una URL que crea una orden o consume un token. El método GET tampoco garantiza ausencia de efectos secundarios: el servidor debe decidir autorización e idempotencia de manera independiente.
Una página prerenderizada puede enviar un beacon antes de ser visible y sobrerrepresentar visitas. Retrasa analítica irreversible hasta la navegación visible. El artículo sobre prevención de fugas DNS muestra por qué las búsquedas auxiliares necesitan su propia revisión; prefetch y prerender también deben entrar en la política de red declarada.
Usa test-user-17, order-synthetic-42 y un receptor propio. No guardes cookies, referrers completos ni parámetros sensibles en un registro público. Redacta durante la captura, limita la retención y documenta quién puede borrar los datos.
Fixture copiable y registro acotado
El siguiente fixture es declarativo. No demuestra que un navegador aceptó la regla, descargó un destino o activó un prerender.
<script type="speculationrules">
{
"prefetch": [
{
"urls": ["/fixture/read-only-shell.html"],
"eagerness": "immediate"
}
],
"prerender": [
{
"urls": ["/fixture/activation-shell.html"],
"eagerness": "conservative"
}
]
}
</script>
<a href="/fixture/read-only-shell.html" data-case="prefetch">Read-only shell</a>
<a href="/fixture/activation-shell.html" data-case="prerender">Activation shell</a>
<output id="speculation-status">not observed</output>
{
"fixture": "speculation-boundary-v1",
"candidate": "/fixture/activation-shell.html",
"hint": "prerender",
"browser": "declared product, version, channel, and OS",
"policy": "response and permissions policy revision",
"credentials": "synthetic, no account cookie",
"declared": true,
"eligible": "unknown until a run records it",
"activated": "unknown until a visible navigation records it",
"abandoned": "unknown until the lifecycle ends",
"observed": null,
"fallback": "ordinary navigation remains available",
"dataClass": "synthetic"
}
Prueba un objetivo de solo lectura y otro con marcador de activación visible, ambos sin escrituras. Un caso negativo puede usar una URL omitida y comprobar que el enlace normal sigue funcionando; una petición ausente no prueba por sí sola que el navegador bloqueó. Si más adelante se ejecuta el fixture, añade versión exacta, política, resultado, señal de activación y razón de abandono en evidencia controlada.
Elige el retroceso según el límite observado
| Situación | Decisión | Motivo |
|---|---|---|
| Destino de solo lectura y cacheable | Preferir prefetch o navegación normal | Menor coste y superficie lateral |
| Shell visible con escrituras diferidas | Considerar prerender conservador | La inicialización oculta sigue siendo reversible |
| El destino muta estado al cargar | No usar prerender | El descarte puede producir una acción no deseada |
| Se necesitan credenciales antes de activar | Exigir navegación y autorización explícitas | La petición puede revelar más de lo previsto |
| Soporte o política desconocidos | Mantener el enlace normal | La sugerencia no es garantía de compatibilidad |
No ocultes un desajuste eliminando la regla o ampliando el conjunto. Compara JSON, cabeceras finales, URL, origen, credenciales, versión y política; después decide entre prefetch, prerender o ninguna especulación. MDN, WICG y la guía de Chrome describen sintaxis y límites, pero no convierten un plan en soporte medido para una versión arbitraria.
Límite de capacidad de BotBrowser
BotBrowser puede abrir un perfil autorizado, repetir un contexto declarado y exponer resultados de un fixture propio cuando el equipo decide ejecutarlo. No puede forzar que el navegador acepte un candidato, activar un prerender, inspeccionar una decisión privada de elegibilidad ni garantizar que un tercero no recibió una petición. La documentación de funciones avanzadas de BotBrowser no anuncia una implementación de Speculation Rules.
El resultado de una futura evaluación debe quedar limitado a perfil, versión, sistema, política y revisión del fixture. Una carga correcta no prueba que todos los candidatos fueron elegibles ni que se evitó toda petición especulativa. Tampoco se debe emplear especulación para eludir autorización, consentimiento, privacidad o límites del proveedor.
FAQ
¿Prefetch significa que la persona visitó el destino?
No. Puede descargar sin navegación visible y ser descartado antes del clic. Cuenta la visita solo con un evento de activación o señal equivalente.
¿Prerender siempre es más rápido?
No. Puede reducir trabajo de activación, pero consume más CPU, memoria e inicialización y puede descartarse por presión de recursos.
¿Una petición especulativa puede usar credenciales?
Puede verse afectada por credenciales, origen, política, caché y service worker. Usa credenciales sintéticas o ninguna; nunca supongas anonimato.
¿Cuándo debe enviarse analítica?
Después de que la navegación visible se confirme. La inicialización oculta puede contar visitas que nunca ocurrieron.
¿Qué hacer si la elegibilidad es desconocida?
Conserva el enlace normal y clasifica el resultado como no verificado. El contenido requerido no debe depender de la sugerencia.
Sources
- Especificación WICG Speculation Rules
- MDN: Speculation Rules API
- Chrome: Prerender pages
- BotBrowser: Advanced features
Conclusión práctica
Usa prefetch para respuestas de solo lectura que toleren una descarga anticipada; usa prerender solo para documentos ocultos que puedan activarse o abandonarse sin escritura irreversible. Trata la elegibilidad como decisión del navegador, la activación como señal de intención visible y las peticiones especulativas como actividad candidata. Mantén credenciales, analítica, almacenamiento y mutaciones detrás de autorización explícita.
La siguiente acción segura es colocar el fixture en un origen propio, mantener operativos los enlaces normales y registrar declarado, elegible, activado y abandonado por separado. Una ejecución futura dirá qué hizo una versión concreta; no probará soporte universal ni convertirá BotBrowser en una implementación de Speculation Rules.
Este artículo forma parte de la guía: Superficies de la plataforma web: mapa de revisión
Artículos Relacionados
Navigation API, historial y límites de privacidad
PlataformaContextos seguros: API del navegador y HTTPS
PlataformaLimites CORS del navegador: cabeceras, preflight, credenciales y cache
PlataformaCaché de atrás/adelante: ciclo de vida, privacidad y coherencia
PlataformaDocument Picture-in-Picture: límites de permisos y ventanas
PlataformaPolítica de mismo origen y aislamiento de sitios
Lleva BotBrowser de la investigación a producción
Usa estas guías para entender el modelo y después avanzar hacia validación multiplataforma, contextos aislados y despliegue de navegador preparado para escalar.