kitesurf · bench

← back to latest

Viewing archived run 2026-06-01 · commit d1fa08a. View latest →

Backend comparison — median wall time

One grouped bar per page, one bar per backend. Bar height = median wall time from the orchestrator's performance.now() span. Hover a bar for median/p95/p99. Missing or all-errored cells render as a thin grey stub.

screenshot · wall

0.0ms 1250ms 2500ms 3750ms 5000ms kitesurf · median 983ms · p95 1264ms · p99 1264mscontainer · median 263ms · p95 268ms · p99 268ms Example Domainexample-comkitesurf · median 1606ms · p95 1671ms · p99 1671mscontainer · median 602ms · p95 1243ms · p99 1243ms Hacker Newshacker-newskitesurf · median 2373ms · p95 2494ms · p99 2494mscontainer · median 726ms · p95 792ms · p99 792ms Cloudflare Developer Docscf-developerskitesurf · median 2601ms · p95 3037ms · p99 3037mscontainer · median 732ms · p95 836ms · p99 836ms The Cloudflare Blogcf-blogkitesurf · median 1891ms · p95 2158ms · p99 2158mscontainer · median 544ms · p95 673ms · p99 673ms Wikipedia Portalwikipedia-portalkitesurf · median 1166ms · p95 1172ms · p99 1172mscontainer · median 299ms · p95 329ms · p99 329ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 1172ms · p95 1505ms · p99 1505mscontainer · median 354ms · p95 367ms · p99 367ms TodoMVC · Reacttodomvc-reactkitesurf · median 1257ms · p95 1614ms · p99 1614mscontainer · median 341ms · p95 364ms · p99 364ms TodoMVC · Vuetodomvc-vuekitesurf · median 2097ms · p95 2101ms · p99 2101mscontainer · median 370ms · p95 389ms · p99 389ms TodoMVC · Angulartodomvc-angularkitesurf · median 1121ms · p95 1882ms · p99 1882mscontainer · median 325ms · p95 374ms · p99 374ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · wall

0.0ms 625ms 1250ms 1875ms 2500ms kitesurf · median 994ms · p95 1413ms · p99 1413mscontainer · median 115ms · p95 120ms · p99 120ms Example Domainexample-comkitesurf · median 1345ms · p95 1427ms · p99 1427mscontainer · median 434ms · p95 673ms · p99 673ms Hacker Newshacker-newskitesurf · median 2358ms · p95 3165ms · p99 3165mscontainer · median 457ms · p95 495ms · p99 495ms Cloudflare Developer Docscf-developerskitesurf · median 2334ms · p95 2384ms · p99 2384mscontainer · median 612ms · p95 769ms · p99 769ms The Cloudflare Blogcf-blogkitesurf · median 1716ms · p95 1984ms · p99 1984mscontainer · median 331ms · p95 398ms · p99 398ms Wikipedia Portalwikipedia-portalkitesurf · median 1053ms · p95 1428ms · p99 1428mscontainer · median 176ms · p95 198ms · p99 198ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 1085ms · p95 1485ms · p99 1485mscontainer · median 189ms · p95 202ms · p99 202ms TodoMVC · Reacttodomvc-reactkitesurf · median 1233ms · p95 1886ms · p99 1886mscontainer · median 183ms · p95 201ms · p99 201ms TodoMVC · Vuetodomvc-vuekitesurf · median 1907ms · p95 2421ms · p99 2421mscontainer · median 226ms · p95 235ms · p99 235ms TodoMVC · Angulartodomvc-angularkitesurf · median 1075ms · p95 1293ms · p99 1293mscontainer · median 149ms · p95 191ms · p99 191ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

Backend comparison — median backend CPU time

Server-side CPU per call. Kitesurf reports $workers.cpuTimeMs from Workers Observability; container reports Node-side CPU via timing headers. Browser-run doesn't expose a CPU counter — bars render as a grey stub.

screenshot · cpu

0.0ms 500ms 1000ms 1500ms 2000ms kitesurf · median 375ms · p95 381ms · p99 381mscontainer · median 369ms · p95 381ms · p99 381ms Example Domainexample-comkitesurf · median 520ms · p95 528ms · p99 528mscontainer · median 552ms · p95 595ms · p99 595ms Hacker Newshacker-newskitesurf · median 1206ms · p95 1228ms · p99 1228mscontainer · median 1569ms · p95 1713ms · p99 1713ms Cloudflare Developer Docscf-developerskitesurf · median 817ms · p95 861ms · p99 861mscontainer · median 1515ms · p95 1739ms · p99 1739ms The Cloudflare Blogcf-blogkitesurf · median 772ms · p95 832ms · p99 832mscontainer · median 1254ms · p95 1364ms · p99 1364ms Wikipedia Portalwikipedia-portalkitesurf · median 412ms · p95 415ms · p99 415mscontainer · median 614ms · p95 629ms · p99 629ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 445ms · p95 454ms · p99 454mscontainer · median 665ms · p95 694ms · p99 694ms TodoMVC · Reacttodomvc-reactkitesurf · median 552ms · p95 570ms · p99 570mscontainer · median 688ms · p95 795ms · p99 795ms TodoMVC · Vuetodomvc-vuekitesurf · median 805ms · p95 839ms · p99 839mscontainer · median 722ms · p95 729ms · p99 729ms TodoMVC · Angulartodomvc-angularkitesurf · median 412ms · p95 975ms · p99 975mscontainer · median 648ms · p95 759ms · p99 759ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · cpu

0.0ms 500ms 1000ms 1500ms 2000ms kitesurf · median 340ms · p95 347ms · p99 347mscontainer · median 236ms · p95 248ms · p99 248ms Example Domainexample-comkitesurf · median 387ms · p95 390ms · p99 390mscontainer · median 406ms · p95 501ms · p99 501ms Hacker Newshacker-newskitesurf · median 939ms · p95 1072ms · p99 1072mscontainer · median 1005ms · p95 1079ms · p99 1079ms Cloudflare Developer Docscf-developerskitesurf · median 696ms · p95 701ms · p99 701mscontainer · median 1240ms · p95 2326ms · p99 2326ms The Cloudflare Blogcf-blogkitesurf · median 493ms · p95 583ms · p99 583mscontainer · median 723ms · p95 916ms · p99 916ms Wikipedia Portalwikipedia-portalkitesurf · median 364ms · p95 382ms · p99 382mscontainer · median 374ms · p95 434ms · p99 434ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 388ms · p95 414ms · p99 414mscontainer · median 395ms · p95 438ms · p99 438ms TodoMVC · Reacttodomvc-reactkitesurf · median 496ms · p95 517ms · p99 517mscontainer · median 383ms · p95 421ms · p99 421ms TodoMVC · Vuetodomvc-vuekitesurf · median 762ms · p95 862ms · p99 862mscontainer · median 469ms · p95 490ms · p99 490ms TodoMVC · Angulartodomvc-angularkitesurf · median 363ms · p95 438ms · p99 438mscontainer · median 330ms · p95 402ms · p99 402ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

Backend comparison — median memory

Per-page memory at end of render. The two backends report different things — bars are directionally comparable, not strictly apples-to-apples.

In short: kitesurf overcounts (high-water peak across the whole renderer); container undercounts (JS heap only). The truth for either backend lives somewhere between the two columns.

screenshot · mem

0MiB 24MiB 48MiB 72MiB 95MiB kitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data Example Domainexample-comkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data Hacker Newshacker-newskitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data Cloudflare Developer Docscf-developerskitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data The Cloudflare Blogcf-blogkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data Wikipedia Portalwikipedia-portalkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · Reacttodomvc-reactkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · Vuetodomvc-vuekitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · Angulartodomvc-angularkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · mem

0MiB 24MiB 48MiB 72MiB 95MiB kitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data Example Domainexample-comkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data Hacker Newshacker-newskitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data Cloudflare Developer Docscf-developerskitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data The Cloudflare Blogcf-blogkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data Wikipedia Portalwikipedia-portalkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · Reacttodomvc-reactkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · Vuetodomvc-vuekitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · Angulartodomvc-angularkitesurf · median 73MiB · p95 73MiB · p99 73MiBcontainer · no data TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

Run 2026-06-01 · per-metric tables

Same layout as npm run bench: per endpoint, tables for wall, cpu, mem. Each backend's median/p95/p99 side by side. ks = kitesurf, br = browser-run, ct = container. = backend doesn't report this metric. err = every recorded run for that combination errored. See the memory chart's caption above for the per-backend metric semantics.

screenshot

wall — screenshot
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 983ms1264ms1264ms263ms268ms268ms
Hacker News hacker-news 1606ms1671ms1671ms602ms1243ms1243ms
Cloudflare Developer Docs cf-developers 2373ms2494ms2494ms726ms792ms792ms
The Cloudflare Blog cf-blog 2601ms3037ms3037ms732ms836ms836ms
Wikipedia Portal wikipedia-portal 1891ms2158ms2158ms544ms673ms673ms
TodoMVC · JavaScript ES6 todomvc-js-es6 1166ms1172ms1172ms299ms329ms329ms
TodoMVC · React todomvc-react 1172ms1505ms1505ms354ms367ms367ms
TodoMVC · Vue todomvc-vue 1257ms1614ms1614ms341ms364ms364ms
TodoMVC · Angular todomvc-angular 2097ms2101ms2101ms370ms389ms389ms
TodoMVC · Preact todomvc-preact 1121ms1882ms1882ms325ms374ms374ms
cpu — screenshot
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 375ms381ms381ms369ms381ms381ms
Hacker News hacker-news 520ms528ms528ms552ms595ms595ms
Cloudflare Developer Docs cf-developers 1206ms1228ms1228ms1569ms1713ms1713ms
The Cloudflare Blog cf-blog 817ms861ms861ms1515ms1739ms1739ms
Wikipedia Portal wikipedia-portal 772ms832ms832ms1254ms1364ms1364ms
TodoMVC · JavaScript ES6 todomvc-js-es6 412ms415ms415ms614ms629ms629ms
TodoMVC · React todomvc-react 445ms454ms454ms665ms694ms694ms
TodoMVC · Vue todomvc-vue 552ms570ms570ms688ms795ms795ms
TodoMVC · Angular todomvc-angular 805ms839ms839ms722ms729ms729ms
TodoMVC · Preact todomvc-preact 412ms975ms975ms648ms759ms759ms
mem — screenshot
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 73MiB73MiB73MiB
Hacker News hacker-news 73MiB73MiB73MiB
Cloudflare Developer Docs cf-developers 73MiB73MiB73MiB
The Cloudflare Blog cf-blog 73MiB73MiB73MiB
Wikipedia Portal wikipedia-portal 73MiB73MiB73MiB
TodoMVC · JavaScript ES6 todomvc-js-es6 73MiB73MiB73MiB
TodoMVC · React todomvc-react 73MiB73MiB73MiB
TodoMVC · Vue todomvc-vue 73MiB73MiB73MiB
TodoMVC · Angular todomvc-angular 73MiB73MiB73MiB
TodoMVC · Preact todomvc-preact 73MiB73MiB73MiB

html

wall — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 994ms1413ms1413ms115ms120ms120ms
Hacker News hacker-news 1345ms1427ms1427ms434ms673ms673ms
Cloudflare Developer Docs cf-developers 2358ms3165ms3165ms457ms495ms495ms
The Cloudflare Blog cf-blog 2334ms2384ms2384ms612ms769ms769ms
Wikipedia Portal wikipedia-portal 1716ms1984ms1984ms331ms398ms398ms
TodoMVC · JavaScript ES6 todomvc-js-es6 1053ms1428ms1428ms176ms198ms198ms
TodoMVC · React todomvc-react 1085ms1485ms1485ms189ms202ms202ms
TodoMVC · Vue todomvc-vue 1233ms1886ms1886ms183ms201ms201ms
TodoMVC · Angular todomvc-angular 1907ms2421ms2421ms226ms235ms235ms
TodoMVC · Preact todomvc-preact 1075ms1293ms1293ms149ms191ms191ms
cpu — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 340ms347ms347ms236ms248ms248ms
Hacker News hacker-news 387ms390ms390ms406ms501ms501ms
Cloudflare Developer Docs cf-developers 939ms1072ms1072ms1005ms1079ms1079ms
The Cloudflare Blog cf-blog 696ms701ms701ms1240ms2326ms2326ms
Wikipedia Portal wikipedia-portal 493ms583ms583ms723ms916ms916ms
TodoMVC · JavaScript ES6 todomvc-js-es6 364ms382ms382ms374ms434ms434ms
TodoMVC · React todomvc-react 388ms414ms414ms395ms438ms438ms
TodoMVC · Vue todomvc-vue 496ms517ms517ms383ms421ms421ms
TodoMVC · Angular todomvc-angular 762ms862ms862ms469ms490ms490ms
TodoMVC · Preact todomvc-preact 363ms438ms438ms330ms402ms402ms
mem — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 73MiB73MiB73MiB
Hacker News hacker-news 73MiB73MiB73MiB
Cloudflare Developer Docs cf-developers 73MiB73MiB73MiB
The Cloudflare Blog cf-blog 73MiB73MiB73MiB
Wikipedia Portal wikipedia-portal 73MiB73MiB73MiB
TodoMVC · JavaScript ES6 todomvc-js-es6 73MiB73MiB73MiB
TodoMVC · React todomvc-react 73MiB73MiB73MiB
TodoMVC · Vue todomvc-vue 73MiB73MiB73MiB
TodoMVC · Angular todomvc-angular 73MiB73MiB73MiB
TodoMVC · Preact todomvc-preact 73MiB73MiB73MiB

History

date commit kitesurf · screenshotkitesurf · htmlcontainer · screenshotcontainer · html note
2026-07-11 17:4615ac2dc1195ms1488ms884ms589ms
2026-07-05 14:03be117861645ms1468ms915ms677msboa eval-less runtime — run page JS (Runtime.evaluate + dynamic import) without V8 code-gen-from-string @lduarte
2026-07-02 00:361f76dfb560ms547ms696ms512msReduce wasm peak memory ~23% (emoji SVG-strip + node-slab pre-size + lazy serif) @lduarte
2026-06-15 10:3678edd791008ms996ms683ms473ms
2026-06-06 10:289afdd69727ms1457ms778ms548ms
2026-06-05 15:46c8a9da7715ms597ms1080ms920msRefactor autoresearch for memory optimization + port wasm-memprof + autoresearch memory opts @lduarte
2026-06-05 15:34c8a9da7715ms597ms1080ms920msRefactor autoresearch for memory optimization + port wasm-memprof + autoresearch memory opts @lduarte
2026-06-02 09:1536cc68a950ms1060ms858ms572ms
2026-06-02 00:32bc688751088ms1234ms734ms520ms
2026-06-02 00:1584bf4a3835ms1360ms521ms356ms
2026-06-02 00:04885052c923ms1079ms693ms505ms
2026-06-01 23:56d1fa08a1173ms1182ms879ms480ms
2026-06-01 23:304e0f0e71358ms1181ms697ms460ms
2026-05-31 19:29cd6a6d51109ms869ms864ms610ms
2026-05-25 22:39caf5678633ms658ms608ms369msrerun with concurrent-producer wallMs fix
2026-05-25 21:37a4d9bf51442ms1151ms741ms410mstail-worker CPU attribution: now includes page-script wasm/JS cost
2026-05-25 11:4804351641359ms1194ms916ms618ms
2026-05-25 11:4804351641362ms1160ms823ms714ms
2026-05-25 11:4804351641215ms1020ms704ms487ms
2026-05-25 11:4804351641172ms925ms706ms394ms

Archived report (markdown)

# kitesurf bench report — 2026-06-01

commit: `d1fa08a` · 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 | 540ms | 592ms | 375ms | 223ms |
| Hacker News | 1094ms | 935ms | 720ms | 540ms |
| Cloudflare Developer Docs | 1391ms | 1683ms | 905ms | 591ms |
| The Cloudflare Blog | 2019ms | 1886ms | 898ms | 760ms |
| Wikipedia Portal | 1173ms | 1182ms | 879ms | 480ms |
| TodoMVC · JavaScript ES6 | 733ms | 637ms | 431ms | 289ms |
| TodoMVC · React | 668ms | 608ms | 473ms | 305ms |
| TodoMVC · Vue | 696ms | 754ms | 464ms | 293ms |
| TodoMVC · Angular | 1637ms | 1448ms | 482ms | 337ms |
| TodoMVC · Preact | 624ms | 573ms | 436ms | 262ms |

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.

bundle built 2026-07-11T17:46:18.286Z