# kitesurf bench report — 2026-06-02

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

## Summary (median wall time)

| Page | kitesurf/screenshot | kitesurf/html | container/screenshot | container/html |
|---|--:|--:|--:|--:|
| Example Domain | 802ms | 565ms | 402ms | 253ms |
| Hacker News | 917ms | 987ms | 857ms | 624ms |
| Cloudflare Developer Docs | 1254ms | 1029ms | 1003ms | 775ms |
| The Cloudflare Blog | 1388ms | 1747ms | 1163ms | 1009ms |
| Wikipedia Portal | 950ms | 1060ms | 858ms | 572ms |
| Der Spiegel | 1402ms | 1513ms | 2039ms | 1705ms |
| El Mundo | 2844ms | 2266ms | 2441ms | 1957ms |
| TodoMVC · JavaScript ES6 | 829ms | 786ms | 538ms | 290ms |
| TodoMVC · React | 823ms | 666ms | 518ms | 332ms |
| TodoMVC · Vue | 683ms | 773ms | 551ms | 333ms |
| TodoMVC · Angular | 1275ms | 1264ms | 655ms | 403ms |
| TodoMVC · Preact | 855ms | 637ms | 508ms | 295ms |

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.
