# kitesurf bench report — 2026-07-02

commit: `1f76dfb` · backends: kitesurf, container · endpoints: screenshot, html · runs/combo: 5 (+ 2 warmup)
target: https://kitesurf-bench.rendering.cfdata.org

> Reduce wasm peak memory ~23% (emoji SVG-strip + node-slab pre-size + lazy serif) @lduarte

## Summary (median wall time)

| Page | kitesurf/screenshot | kitesurf/html | container/screenshot | container/html |
|---|--:|--:|--:|--:|
| Example Domain | 708ms | 674ms | 322ms | 202ms |
| Hacker News | 1054ms | 902ms | 737ms | 1788ms |
| Cloudflare Developer Docs | 1674ms | 796ms | 650ms | 563ms |
| The Cloudflare Blog | 1597ms | 1169ms | 724ms | 532ms |
| Wikipedia Portal | 560ms | 547ms | 696ms | 512ms |
| Der Spiegel | 1106ms | 1050ms | 1032ms | 1039ms |
| El Mundo | 1051ms | 1648ms | 993ms | 992ms |
| TodoMVC · JavaScript ES6 | 500ms | 755ms | 629ms | 293ms |
| TodoMVC · React | 515ms | 517ms | 711ms | 271ms |
| TodoMVC · Vue | 533ms | 773ms | 552ms | 298ms |
| TodoMVC · Angular | 547ms | 522ms | 435ms | 301ms |
| TodoMVC · Preact | 731ms | 776ms | 399ms | 263ms |

Notes:

- Values are run medians across recorded runs. p95 and min/max are in the JSON.
- Backends are dispatched from inside the `kitesurf-bench` worker via RPC bindings: `env.KITESURF.fetch(/screenshot|/html)` for kitesurf (service binding to the engine), `env.BROWSER.quickAction('screenshot'|'content', …)` for browser-run (Browser Rendering RPC), and `env.CONTAINER_HOST.fetch(…)` for container (sibling worker fronting its container backend). Wall time is the orchestrator's `performance.now()` span; `backendWallMs` / `backendCpuMs` in the JSON come from Workers Observability (kitesurf) or container-side timing headers (container). None of the measurement paths traverse the public internet.
- A cell shows `—` when every recorded run for that combination errored. See `rows` in the JSON for individual failure messages.
