Problem
sgdata pages fetch live data on every request. For data that updates every 5-15 minutes (weather, environment readings), there's no need to fetch on every page view.
Proposed Solution
Pre-render sgdata pages on a schedule and serve the pre-rendered HTML instantly. Revalidate in the background when data goes stale.
How it would work
pub const prerender = true;
pub const revalidate = 300; // seconds — re-render every 5 minutes
pub fn render(req: mer.Request) mer.Response {
const weather = try mer.fetch(req.allocator, .{ .url = "..." });
return mer.render(req.allocator, page(weather.body));
}
- On first request: render page, save to
dist/, serve HTML
- On subsequent requests: serve
dist/ HTML instantly (0ms render time)
- After
revalidate seconds: next request triggers background re-render
- Old page served until new render completes (stale-while-revalidate)
Tasks
Expected Impact
LCP: 5.4s → <0.5s for all requests after the first render.
Equivalent to Next.js ISR (Incremental Static Regeneration).
Problem
sgdata pages fetch live data on every request. For data that updates every 5-15 minutes (weather, environment readings), there's no need to fetch on every page view.
Proposed Solution
Pre-render sgdata pages on a schedule and serve the pre-rendered HTML instantly. Revalidate in the background when data goes stale.
How it would work
dist/, serve HTMLdist/HTML instantly (0ms render time)revalidateseconds: next request triggers background re-renderTasks
pub const revalidate: u32support to route codegenserver.zigdist/with freshness checkrevalidate = 300Expected Impact
LCP: 5.4s → <0.5s for all requests after the first render.
Equivalent to Next.js ISR (Incremental Static Regeneration).