Skip to content

benchmark: hover não dispara prefetch de speculation-rules (HAR sem Sec-Purpose) #259

Description

@JonasJesus42

Achado ao validar prefetch (portal-davinci, 2026-08-20)

O que foi validado

Pedido: confirmar que o benchmark ativa o hover pro prefetch. Resultado: não ativa o prefetch real.

Evidência

  • navigateWithHover faz .hover() + 500ms + click (código correto), e o content journey agora abre o menu mobile antes (anchor fica visível → caminho de hover, não goto).
  • MAS o HAR do cand mobile mostra 6 requests de documento pra /blog e /especialidades, todos com Sec-Purpose ausente — nenhum prefetch de speculation-rules. São navegações frias normais.
  • Timings confirmam: nav ~1.34–1.39s (sem head-start de prefetch).

Causa provável

  1. Hover sintético do Playwright não dispara a heurística eagerness: moderate das Speculation Rules em Chromium headless/automação (a heurística usa sinais de dwell/engajamento reais).
  2. No site, as speculation rules são injetadas no evento load (fix do React #418) — pode não estar registrada a tempo no fluxo do benchmark.

Impacto

O benchmark mede navegação fria, não o head-start do prefetch. Pra sites que dependem de prefetch (speculation rules / <Link preload>), o número subestima o ganho real percebido pelo usuário.

Opções de fix

  1. Usar eagerness: eager numa speculation rule de teste durante o benchmark, ou dispatch explícito de pointerdown + espera de dwell maior.
  2. Detectar se o prefetch disparou (checar Sec-Purpose: prefetch no HAR) e avisar no report quando o hover não resultou em prefetch — assim o número fica honesto ('nav fria, sem prefetch').
  3. Medir os dois cenários: com e sem prefetch (cold vs warm-by-hover), e mostrar ambos.

Relacionado

Speculation Rules foram adicionadas no davinci (commit 57fb16b/d39fba9). O ganho é real pra usuário; o benchmark é que não reproduz.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    plugin-gapGap or bug found in the parity migration plugin during a real migration run

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions