kitesurf · bench

← back to latest

Viewing archived run 2026-06-15 · commit 78edd79. 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 480ms · p95 491ms · p99 491mscontainer · median 232ms · p95 240ms · p99 240ms Example Domainexample-comkitesurf · median 745ms · p95 1259ms · p99 1259mscontainer · median 607ms · p95 647ms · p99 647ms Hacker Newshacker-newskitesurf · median 1454ms · p95 2953ms · p99 2953mscontainer · median 647ms · p95 675ms · p99 675ms Cloudflare Developer Docscf-developerskitesurf · median 1748ms · p95 1870ms · p99 1870mscontainer · median 693ms · p95 746ms · p99 746ms The Cloudflare Blogcf-blogkitesurf · median 1432ms · p95 1499ms · p99 1499mscontainer · median 571ms · p95 4629ms · p99 4629ms Wikipedia Portalwikipedia-portalkitesurf · median 1884ms · p95 1952ms · p99 1952mscontainer · median 1055ms · p95 1124ms · p99 1124ms Der Spiegelspiegelkitesurf · median 3383ms · p95 3675ms · p99 3675mscontainer · median 1795ms · p95 1812ms · p99 1812ms El Mundoelmundokitesurf · median 945ms · p95 1004ms · p99 1004mscontainer · median 335ms · p95 402ms · p99 402ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 1040ms · p95 1112ms · p99 1112mscontainer · median 337ms · p95 356ms · p99 356ms TodoMVC · Reacttodomvc-reactkitesurf · median 950ms · p95 1107ms · p99 1107mscontainer · median 309ms · p95 370ms · p99 370ms TodoMVC · Vuetodomvc-vuekitesurf · median 1666ms · p95 2089ms · p99 2089mscontainer · median 373ms · p95 382ms · p99 382ms TodoMVC · Angulartodomvc-angularkitesurf · median 914ms · p95 984ms · p99 984mscontainer · median 309ms · p95 321ms · p99 321ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · wall

0.0ms 1250ms 2500ms 3750ms 5000ms kitesurf · median 467ms · p95 473ms · p99 473mscontainer · median 107ms · p95 112ms · p99 112ms Example Domainexample-comkitesurf · median 662ms · p95 673ms · p99 673mscontainer · median 459ms · p95 754ms · p99 754ms Hacker Newshacker-newskitesurf · median 1531ms · p95 1590ms · p99 1590mscontainer · median 519ms · p95 569ms · p99 569ms Cloudflare Developer Docscf-developerskitesurf · median 1588ms · p95 1714ms · p99 1714mscontainer · median 505ms · p95 612ms · p99 612ms The Cloudflare Blogcf-blogkitesurf · median 1225ms · p95 1265ms · p99 1265mscontainer · median 354ms · p95 392ms · p99 392ms Wikipedia Portalwikipedia-portalkitesurf · median 1445ms · p95 1445ms · p99 1445mscontainer · median 964ms · p95 996ms · p99 996ms Der Spiegelspiegelkitesurf · median 2779ms · p95 5092ms · p99 5092mscontainer · median 1380ms · p95 1522ms · p99 1522ms El Mundoelmundokitesurf · median 618ms · p95 957ms · p99 957mscontainer · median 165ms · p95 211ms · p99 211ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 688ms · p95 979ms · p99 979mscontainer · median 170ms · p95 202ms · p99 202ms TodoMVC · Reacttodomvc-reactkitesurf · median 799ms · p95 889ms · p99 889mscontainer · median 174ms · p95 187ms · p99 187ms TodoMVC · Vuetodomvc-vuekitesurf · median 1527ms · p95 1605ms · p99 1605mscontainer · median 222ms · p95 244ms · p99 244ms TodoMVC · Angulartodomvc-angularkitesurf · median 638ms · p95 946ms · p99 946mscontainer · median 149ms · p95 179ms · p99 179ms 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 1250ms 2500ms 3750ms 5000ms kitesurf · median 51ms · p95 55ms · p99 55mscontainer · median 323ms · p95 330ms · p99 330ms Example Domainexample-comkitesurf · median 154ms · p95 176ms · p99 176mscontainer · median 486ms · p95 514ms · p99 514ms Hacker Newshacker-newskitesurf · median 553ms · p95 1878ms · p99 1878mscontainer · median 1287ms · p95 1427ms · p99 1427ms Cloudflare Developer Docscf-developerskitesurf · median 455ms · p95 461ms · p99 461mscontainer · median 1484ms · p95 1982ms · p99 1982ms The Cloudflare Blogcf-blogkitesurf · median 410ms · p95 425ms · p99 425mscontainer · median 1124ms · p95 1438ms · p99 1438ms Wikipedia Portalwikipedia-portalkitesurf · median 1026ms · p95 1058ms · p99 1058mscontainer · median 2098ms · p95 2209ms · p99 2209ms Der Spiegelspiegelkitesurf · median 1819ms · p95 2019ms · p99 2019mscontainer · median 3918ms · p95 4259ms · p99 4259ms El Mundoelmundokitesurf · median 95ms · p95 99ms · p99 99mscontainer · median 633ms · p95 745ms · p99 745ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 130ms · p95 142ms · p99 142mscontainer · median 555ms · p95 599ms · p99 599ms TodoMVC · Reacttodomvc-reactkitesurf · median 256ms · p95 342ms · p99 342mscontainer · median 540ms · p95 699ms · p99 699ms TodoMVC · Vuetodomvc-vuekitesurf · median 529ms · p95 576ms · p99 576mscontainer · median 635ms · p95 780ms · p99 780ms TodoMVC · Angulartodomvc-angularkitesurf · median 98ms · p95 103ms · p99 103mscontainer · median 502ms · p95 562ms · p99 562ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · cpu

0.0ms 1250ms 2500ms 3750ms 5000ms kitesurf · median 34ms · p95 37ms · p99 37mscontainer · median 205ms · p95 268ms · p99 268ms Example Domainexample-comkitesurf · median 54ms · p95 55ms · p99 55mscontainer · median 374ms · p95 409ms · p99 409ms Hacker Newshacker-newskitesurf · median 557ms · p95 625ms · p99 625mscontainer · median 1072ms · p95 1142ms · p99 1142ms Cloudflare Developer Docscf-developerskitesurf · median 331ms · p95 368ms · p99 368mscontainer · median 1025ms · p95 1259ms · p99 1259ms The Cloudflare Blogcf-blogkitesurf · median 168ms · p95 251ms · p99 251mscontainer · median 808ms · p95 862ms · p99 862ms Wikipedia Portalwikipedia-portalkitesurf · median 798ms · p95 798ms · p99 798mscontainer · median 1732ms · p95 1815ms · p99 1815ms Der Spiegelspiegelkitesurf · median 1159ms · p95 1251ms · p99 1251mscontainer · median 3268ms · p95 3423ms · p99 3423ms El Mundoelmundokitesurf · median 50ms · p95 55ms · p99 55mscontainer · median 328ms · p95 425ms · p99 425ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 82ms · p95 85ms · p99 85mscontainer · median 335ms · p95 391ms · p99 391ms TodoMVC · Reacttodomvc-reactkitesurf · median 190ms · p95 194ms · p99 194mscontainer · median 348ms · p95 377ms · p99 377ms TodoMVC · Vuetodomvc-vuekitesurf · median 442ms · p95 480ms · p99 480mscontainer · median 441ms · p95 480ms · p99 480ms TodoMVC · Angulartodomvc-angularkitesurf · median 57ms · p95 65ms · p99 65mscontainer · median 303ms · p95 344ms · p99 344ms 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 15MiB · p95 15MiB · p99 15MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB Example Domainexample-comkitesurf · median 21MiB · p95 21MiB · p99 21MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB Hacker Newshacker-newskitesurf · median 29MiB · p95 29MiB · p99 29MiBcontainer · median 4MiB · p95 4MiB · p99 4MiB Cloudflare Developer Docscf-developerskitesurf · median 26MiB · p95 26MiB · p99 26MiBcontainer · median 3MiB · p95 4MiB · p99 4MiB The Cloudflare Blogcf-blogkitesurf · median 30MiB · p95 30MiB · p99 30MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB Wikipedia Portalwikipedia-portalkitesurf · median 94MiB · p95 94MiB · p99 94MiBcontainer · median 8MiB · p95 8MiB · p99 8MiB Der Spiegelspiegelkitesurf · median 71MiB · p95 72MiB · p99 72MiBcontainer · median 20MiB · p95 21MiB · p99 21MiB El Mundoelmundokitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB TodoMVC · Reacttodomvc-reactkitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB TodoMVC · Vuetodomvc-vuekitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 7MiB · p95 7MiB · p99 7MiB TodoMVC · Angulartodomvc-angularkitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · mem

0MiB 24MiB 48MiB 72MiB 95MiB kitesurf · median 10MiB · p95 10MiB · p99 10MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB Example Domainexample-comkitesurf · median 14MiB · p95 14MiB · p99 14MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB Hacker Newshacker-newskitesurf · median 29MiB · p95 29MiB · p99 29MiBcontainer · median 4MiB · p95 5MiB · p99 5MiB Cloudflare Developer Docscf-developerskitesurf · median 26MiB · p95 28MiB · p99 28MiBcontainer · median 3MiB · p95 4MiB · p99 4MiB The Cloudflare Blogcf-blogkitesurf · median 20MiB · p95 20MiB · p99 20MiBcontainer · median 3MiB · p95 4MiB · p99 4MiB Wikipedia Portalwikipedia-portalkitesurf · median 94MiB · p95 94MiB · p99 94MiBcontainer · median 8MiB · p95 8MiB · p99 8MiB Der Spiegelspiegelkitesurf · median 53MiB · p95 53MiB · p99 53MiBcontainer · median 21MiB · p95 21MiB · p99 21MiB El Mundoelmundokitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB TodoMVC · Reacttodomvc-reactkitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB TodoMVC · Vuetodomvc-vuekitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 6MiB · p95 6MiB · p99 6MiB TodoMVC · Angulartodomvc-angularkitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

Run 2026-06-15 · 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 480ms491ms491ms232ms240ms240ms
Hacker News hacker-news 745ms1259ms1259ms607ms647ms647ms
Cloudflare Developer Docs cf-developers 1454ms2953ms2953ms647ms675ms675ms
The Cloudflare Blog cf-blog 1748ms1870ms1870ms693ms746ms746ms
Wikipedia Portal wikipedia-portal 1432ms1499ms1499ms571ms4629ms4629ms
Der Spiegel spiegel 1884ms1952ms1952ms1055ms1124ms1124ms
El Mundo elmundo 3383ms3675ms3675ms1795ms1812ms1812ms
TodoMVC · JavaScript ES6 todomvc-js-es6 945ms1004ms1004ms335ms402ms402ms
TodoMVC · React todomvc-react 1040ms1112ms1112ms337ms356ms356ms
TodoMVC · Vue todomvc-vue 950ms1107ms1107ms309ms370ms370ms
TodoMVC · Angular todomvc-angular 1666ms2089ms2089ms373ms382ms382ms
TodoMVC · Preact todomvc-preact 914ms984ms984ms309ms321ms321ms
cpu — screenshot
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 51ms55ms55ms323ms330ms330ms
Hacker News hacker-news 154ms176ms176ms486ms514ms514ms
Cloudflare Developer Docs cf-developers 553ms1878ms1878ms1287ms1427ms1427ms
The Cloudflare Blog cf-blog 455ms461ms461ms1484ms1982ms1982ms
Wikipedia Portal wikipedia-portal 410ms425ms425ms1124ms1438ms1438ms
Der Spiegel spiegel 1026ms1058ms1058ms2098ms2209ms2209ms
El Mundo elmundo 1819ms2019ms2019ms3918ms4259ms4259ms
TodoMVC · JavaScript ES6 todomvc-js-es6 95ms99ms99ms633ms745ms745ms
TodoMVC · React todomvc-react 130ms142ms142ms555ms599ms599ms
TodoMVC · Vue todomvc-vue 256ms342ms342ms540ms699ms699ms
TodoMVC · Angular todomvc-angular 529ms576ms576ms635ms780ms780ms
TodoMVC · Preact todomvc-preact 98ms103ms103ms502ms562ms562ms
mem — screenshot
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 15MiB15MiB15MiB2MiB2MiB2MiB
Hacker News hacker-news 21MiB21MiB21MiB2MiB2MiB2MiB
Cloudflare Developer Docs cf-developers 29MiB29MiB29MiB4MiB4MiB4MiB
The Cloudflare Blog cf-blog 26MiB26MiB26MiB3MiB4MiB4MiB
Wikipedia Portal wikipedia-portal 30MiB30MiB30MiB3MiB3MiB3MiB
Der Spiegel spiegel 94MiB94MiB94MiB8MiB8MiB8MiB
El Mundo elmundo 71MiB72MiB72MiB20MiB21MiB21MiB
TodoMVC · JavaScript ES6 todomvc-js-es6 16MiB16MiB16MiB2MiB2MiB2MiB
TodoMVC · React todomvc-react 16MiB16MiB16MiB3MiB3MiB3MiB
TodoMVC · Vue todomvc-vue 16MiB16MiB16MiB3MiB3MiB3MiB
TodoMVC · Angular todomvc-angular 16MiB16MiB16MiB7MiB7MiB7MiB
TodoMVC · Preact todomvc-preact 16MiB16MiB16MiB2MiB2MiB2MiB

html

wall — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 467ms473ms473ms107ms112ms112ms
Hacker News hacker-news 662ms673ms673ms459ms754ms754ms
Cloudflare Developer Docs cf-developers 1531ms1590ms1590ms519ms569ms569ms
The Cloudflare Blog cf-blog 1588ms1714ms1714ms505ms612ms612ms
Wikipedia Portal wikipedia-portal 1225ms1265ms1265ms354ms392ms392ms
Der Spiegel spiegel 1445ms1445ms1445ms964ms996ms996ms
El Mundo elmundo 2779ms5092ms5092ms1380ms1522ms1522ms
TodoMVC · JavaScript ES6 todomvc-js-es6 618ms957ms957ms165ms211ms211ms
TodoMVC · React todomvc-react 688ms979ms979ms170ms202ms202ms
TodoMVC · Vue todomvc-vue 799ms889ms889ms174ms187ms187ms
TodoMVC · Angular todomvc-angular 1527ms1605ms1605ms222ms244ms244ms
TodoMVC · Preact todomvc-preact 638ms946ms946ms149ms179ms179ms
cpu — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 34ms37ms37ms205ms268ms268ms
Hacker News hacker-news 54ms55ms55ms374ms409ms409ms
Cloudflare Developer Docs cf-developers 557ms625ms625ms1072ms1142ms1142ms
The Cloudflare Blog cf-blog 331ms368ms368ms1025ms1259ms1259ms
Wikipedia Portal wikipedia-portal 168ms251ms251ms808ms862ms862ms
Der Spiegel spiegel 798ms798ms798ms1732ms1815ms1815ms
El Mundo elmundo 1159ms1251ms1251ms3268ms3423ms3423ms
TodoMVC · JavaScript ES6 todomvc-js-es6 50ms55ms55ms328ms425ms425ms
TodoMVC · React todomvc-react 82ms85ms85ms335ms391ms391ms
TodoMVC · Vue todomvc-vue 190ms194ms194ms348ms377ms377ms
TodoMVC · Angular todomvc-angular 442ms480ms480ms441ms480ms480ms
TodoMVC · Preact todomvc-preact 57ms65ms65ms303ms344ms344ms
mem — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 10MiB10MiB10MiB2MiB2MiB2MiB
Hacker News hacker-news 14MiB14MiB14MiB2MiB2MiB2MiB
Cloudflare Developer Docs cf-developers 29MiB29MiB29MiB4MiB5MiB5MiB
The Cloudflare Blog cf-blog 26MiB28MiB28MiB3MiB4MiB4MiB
Wikipedia Portal wikipedia-portal 20MiB20MiB20MiB3MiB4MiB4MiB
Der Spiegel spiegel 94MiB94MiB94MiB8MiB8MiB8MiB
El Mundo elmundo 53MiB53MiB53MiB21MiB21MiB21MiB
TodoMVC · JavaScript ES6 todomvc-js-es6 11MiB11MiB11MiB2MiB2MiB2MiB
TodoMVC · React todomvc-react 11MiB11MiB11MiB3MiB3MiB3MiB
TodoMVC · Vue todomvc-vue 11MiB11MiB11MiB3MiB3MiB3MiB
TodoMVC · Angular todomvc-angular 11MiB11MiB11MiB6MiB6MiB6MiB
TodoMVC · Preact todomvc-preact 11MiB11MiB11MiB2MiB2MiB2MiB

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-15

commit: `78edd79` · 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 | 438ms | 425ms | 289ms | 164ms |
| Hacker News | 708ms | 621ms | 721ms | 526ms |
| Cloudflare Developer Docs | 1443ms | 1049ms | 723ms | 598ms |
| The Cloudflare Blog | 1327ms | 1276ms | 773ms | 629ms |
| Wikipedia Portal | 1008ms | 996ms | 683ms | 473ms |
| Der Spiegel | 1027ms | 695ms | 1175ms | 1137ms |
| El Mundo | 1799ms | 2247ms | 1886ms | 1468ms |
| TodoMVC · JavaScript ES6 | 864ms | 501ms | 542ms | 346ms |
| TodoMVC · React | 848ms | 545ms | 421ms | 419ms |
| TodoMVC · Vue | 663ms | 602ms | 394ms | 242ms |
| TodoMVC · Angular | 1332ms | 1278ms | 442ms | 285ms |
| TodoMVC · Preact | 774ms | 512ms | 368ms | 210ms |

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