Cache ISR
bext met en cache le HTML rendu selon l'entrée [[route_rules]]. Rechargez rapidement et vous voyez le même horodatage ; attendez après ttl_ms et la prochaine requête re-rend la page. Le compteur de rendu ci-dessous est incrémenté côté serveur à chaque MISS de cache — il vit dans le store L1/L2 de la couche cache et survit au roulement des isolats V8. La réponse porte x-bext-cache: hit | stale | miss et x-bext-render-count: N.
Astuce
Avec <code>swr_ms</code> actif, le visiteur reçoit toujours une réponse instantanée (HTML périmé) même pendant le re-rendu en arrière-plan. Sans <code>swr_ms</code>, le premier visiteur après expiration attend le rendu complet. Préférez donc <code>swr_ms ≥ ttl_ms / 2</code> pour les pages à contenu non critique.
Résultat
rendu à 2026-09-06T03:49:20.751Z
rendu n° 2
Rechargez rapidement — l'horodatage reste identique. Après 60 s, le prochain rechargement déclenche un nouveau rendu et le compteur s'incrémente.
// bext.config.toml
[[route_rules]]
pattern = "/**"
render = "isr"
ttl_ms = 60000 // cache for 60 s
swr_ms = 30000 // serve stale for another 30 s while revalidating
// src/app/examples/isr/page.tsx — every render stamps the current time.
// Under ISR the HTML is cached for ttl_ms; refresh inside the window
// returns the same HTML (same timestamp). 2 is
// substituted server-side with a per-route counter that bumps on every
// cache MISS — it tells you how many fresh renders this route has done
// over its lifetime, regardless of V8 isolate churn.
export default function Page() {
const stamp = new Date().toISOString();
return (
<p>
rendered at {stamp} — render #
<Raw html="2" />
</p>
);
}