Skip to content

Benchmark Proa against production SvelteKit - #2

Merged
hariria merged 7 commits into
mainfrom
codex/sveltekit-benchmarks
Oct 21, 2026
Merged

hariria merged 7 commits into
mainfrom
codex/sveltekit-benchmarks

Conversation

@hariria

@hariria hariria commented Oct 21, 2026 •

Copy link
Copy Markdown
Member

Results first

Proa shows the first streamed panel earlier. SvelteKit finishes all 96 cards earlier on the throttled connection.

Measurement Proa SvelteKit
Static 96-card page: HTTP capacity 17,838 req/s 1,458 req/s
Cold start: P50 3.99 ms 55 ms
Throttled browser: first panel P50 96.35 ms 278.05 ms
Throttled browser: all 96 cards P50 362.20 ms 278.05 ms
Streaming browser: total transfer 378.7 KiB 119.7 KiB

HTTP capacity above measures the static HTML page. The browser rows measure native streaming, from navigation until content reaches the DOM.

Why Proa finishes later here

Proa transfers about 3.2× as many bytes in this fixture.

  • Proa sends rendered HTML: repeated card markup and SVG stars, wrapped in base64 boundary envelopes. Its inline replacement runtime is included in the transfer.
  • SvelteKit sends product data: the browser hydrates and builds the cards. Its 119.7 KiB total includes 101.4 KiB of external JavaScript.
  • This profile limits download speed to 10 Mbps, applies 4× CPU slowdown, and uses a 40 ms minimum request-to-response-headers delay. Browser cache is disabled; compression is off.

The larger payload is a likely contributor to Proa's 84 ms later completion, despite its 182 ms earlier first panel. This capture does not isolate transfer, decoding, parsing, and DOM work, so it cannot assign the entire gap to one cause. Compression could change the result; it was not measured here.

On the faster desktop profile, all-card P50 is 97.9 ms for Proa / 93.7 ms for SvelteKit. These are complete-DOM timings, not measured paint times.

What changed

  • Add production SvelteKit with its Node adapter, equivalent canonical pages, and one native streaming comparison: 8 delayed panels, 96 cards, identical resolved panel DOM.
  • Rerun SSR, scaling, HTTP capacity, cold starts, and streaming/browser measurements. Retain raw captures, source fingerprints, and overload failures.
  • Update seven existing charts. Overlay Proa, Marko, React, and SvelteKit on the shared streaming load figure; add a paired browser timing figure.
  • Extend CI with SvelteKit builds, DOM parity, streaming smoke checks, and capture/report validation.

Full results and methodology · Browser timing figure · Combined streaming load figure

Confidence and limits

  • Same shared M4 Max host, production builds. Browser results use 30 navigations per framework/profile. These are fixture-specific results; throttling simulates a mobile profile on a desktop.
  • Every measured browser navigation passed complete panel DOM parity. SvelteKit's HTTP stream ends after delivering data; the other frameworks deliver resolved HTML. Use browser DOM completion to compare the finished UI.
  • Combined chart capture dates differ: October 21 Proa/SvelteKit and September 4 Marko/React, both labeled. The displayed comparison has one SvelteKit entry; raw results retain an unplotted buffered control.
  • Validation passed: repository tests, streaming regression tests, report freshness, production-build smoke checks, workflow lint, chart checks, and visual inspection. All CI jobs passed on b0b6642.

@greptile-apps

greptile-apps Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The changes since the previous review appear safe to merge.

Summary

Adds production SvelteKit benchmarks for HTTP capacity, cold starts, and browser-complete streaming.

  • Proa and SvelteKit streaming results show both response end and browser completion.
  • SvelteKit now appears in the canonical HTTP and cold-start benchmarks.
  • The refreshed benchmark reports use current captures and a matching Svelte compiler version.

Reviews (7) · Last reviewed commit: "Keep framework colors consistent and fix..." · Reviewed by Greptile

Comment thread sveltekit/run.mjs Resolved
Comment thread sveltekit/report.mjs Resolved
hariria and others added 6 commits October 20, 2026 19:29
The browser figure drew Proa in the green that chart 07 uses for SvelteKit.
Move the SvelteKit color into the chart theme and use it in both figures.

Update the chart 07 alt text and caption in http-capacity.md for four
engines. Note that its Proa line comes from the newer SvelteKit capture,
not from the table above it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@hariria
hariria merged commit 92aab46 into main Oct 21, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant