SnapFire FSR Size benchmarks
What a deployment carries and what each page costs a browser.
Throughput in req/s: Responses read in full per second. Measured on Apple M4 Pro (14 cores).
Higher is better for requests per second. Lower is better for latency, memory, build time and size. Bold marks the best figure in a row and every figure within 5% of it.
Deploy
| Measure | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| Deploy tree | 28.2 MiB | 44.5 MiB | 1.5 MiB | 2.4 MiB | 13.3 MiB | 8.6 MiB |
| Files in the tree | 460 | 1,351 | 181 | 168 | 6 | 6 |
| Server binary as built | 24.6 MiB | - | - | - | 12.5 MiB | 7.3 MiB |
| Server binary stripped | 18.9 MiB | - | - | - | 7.1 MiB | 4.7 MiB |
| Runtime needed beside it | - | Node v23.9.0, 107.3 MiB | Node v23.9.0, 107.3 MiB | Node v23.9.0, 107.3 MiB | - | - |
| Total to deploy | 28.2 MiB | 151.8 MiB | 108.8 MiB | 109.7 MiB | 13.3 MiB | 8.6 MiB |
The total is the deploy tree, which holds the server binary where there is one, plus the runtime that has to be installed beside it.
Document
| Page | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| home | 1.9 KiB (5.9 KiB raw) | 1.9 KiB (6.4 KiB raw) | 1.1 KiB (2.7 KiB raw) | 1.1 KiB (2.3 KiB raw) | 1.1 KiB (2.2 KiB raw) | 1.1 KiB (2.5 KiB raw) |
| counter | 1.7 KiB (5.8 KiB raw) | 1.7 KiB (5.9 KiB raw) | 0.9 KiB (2.2 KiB raw) | 0.9 KiB (1.9 KiB raw) | 0.9 KiB (1.8 KiB raw) | 0.9 KiB (1.9 KiB raw) |
| catalog | 2.5 KiB (14.4 KiB raw) | 3.7 KiB (34.2 KiB raw) | 2.4 KiB (15.0 KiB raw) | 2.9 KiB (15.4 KiB raw) | 2.7 KiB (15.5 KiB raw) | 4.3 KiB (27.9 KiB raw) |
| product | 1.9 KiB (6.5 KiB raw) | 2.1 KiB (9.2 KiB raw) | 1.3 KiB (3.7 KiB raw) | 1.3 KiB (3.5 KiB raw) | 1.6 KiB (4.0 KiB raw) | 1.7 KiB (4.9 KiB raw) |
| search | 2.0 KiB (7.7 KiB raw) | 2.4 KiB (12.9 KiB raw) | 1.5 KiB (5.4 KiB raw) | 1.6 KiB (5.3 KiB raw) | 1.8 KiB (5.7 KiB raw) | 2.1 KiB (8.2 KiB raw) |
| primes | 1.7 KiB (5.7 KiB raw) | 1.8 KiB (6.8 KiB raw) | 1.0 KiB (2.4 KiB raw) | 1.0 KiB (2.2 KiB raw) | 1.3 KiB (2.8 KiB raw) | 1.1 KiB (2.6 KiB raw) |
| report | 2.0 KiB (6.7 KiB raw) | 2.4 KiB (10.8 KiB raw) | 1.6 KiB (4.6 KiB raw) | 1.7 KiB (4.6 KiB raw) | 1.9 KiB (5.2 KiB raw) | 2.2 KiB (7.2 KiB raw) |
| words | 1.8 KiB (6.0 KiB raw) | 2.0 KiB (8.2 KiB raw) | 1.2 KiB (3.1 KiB raw) | 1.2 KiB (3.0 KiB raw) | 1.4 KiB (3.6 KiB raw) | 1.4 KiB (4.3 KiB raw) |
| table | 4.9 KiB (54.1 KiB raw) | 13.5 KiB (203.6 KiB raw) | 7.3 KiB (92.7 KiB raw) | 10.8 KiB (91.3 KiB raw) | 8.3 KiB (107.5 KiB raw) | 22.5 KiB (229.0 KiB raw) |
Gzipped, with the raw size beside it.
JavaScript
| Page | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| home | 40.0 KiB (115.2 KiB raw) | 134.7 KiB (454.0 KiB raw) | 33.9 KiB (88.1 KiB raw) | 69.5 KiB (185.3 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
| counter | 40.0 KiB (115.2 KiB raw) | 135.0 KiB (454.5 KiB raw) | 33.7 KiB (87.8 KiB raw) | 69.3 KiB (184.9 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
| catalog | 40.0 KiB (115.2 KiB raw) | 134.7 KiB (454.0 KiB raw) | 34.0 KiB (88.4 KiB raw) | 74.5 KiB (204.5 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
| product | 40.0 KiB (115.2 KiB raw) | 134.7 KiB (454.0 KiB raw) | 34.2 KiB (88.7 KiB raw) | 74.6 KiB (204.7 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
| search | 40.0 KiB (115.2 KiB raw) | 134.7 KiB (454.0 KiB raw) | 34.1 KiB (88.4 KiB raw) | 74.5 KiB (204.4 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
| primes | 40.0 KiB (115.2 KiB raw) | 134.7 KiB (454.0 KiB raw) | 33.5 KiB (87.5 KiB raw) | 74.6 KiB (204.6 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
| report | 40.0 KiB (115.2 KiB raw) | 134.7 KiB (454.0 KiB raw) | 33.8 KiB (88.0 KiB raw) | 74.8 KiB (205.1 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
| words | 40.0 KiB (115.2 KiB raw) | 134.7 KiB (454.0 KiB raw) | 33.5 KiB (87.5 KiB raw) | 74.6 KiB (204.6 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
| table | 40.0 KiB (115.2 KiB raw) | 134.7 KiB (454.0 KiB raw) | 33.7 KiB (87.9 KiB raw) | 74.8 KiB (204.9 KiB raw) | 6.7 KiB (23.0 KiB raw) | 15.8 KiB (67.2 KiB raw) |
Gzipped, with the raw size beside it.
WebAssembly
| Page | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| home | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
| counter | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
| catalog | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
| product | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
| search | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
| primes | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
| report | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
| words | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
| table | - | - | - | - | 257.1 KiB (721.9 KiB raw) | 483.2 KiB (1.3 MiB raw) |
Gzipped, with the raw size beside it.
Leptos and Dioxus hydrate by loading the whole app compiled to WebAssembly, so a page costs a browser this on top of its JavaScript. The other four hydrate with JavaScript alone and load none.
CSS
| Page | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| home | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
| counter | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
| catalog | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
| product | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
| search | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
| primes | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
| report | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
| words | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
| table | 0.7 KiB (1.3 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.2 KiB raw) | 0.6 KiB (1.3 KiB raw) | 0.6 KiB (1.3 KiB raw) |
Gzipped, with the raw size beside it.
Requests to show the page
| Page | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| home | 32, then 7 later (79.8 KiB) | 8 | 12 | 6 | 4 | 4 |
| counter | 32, then 7 later (79.8 KiB) | 9 | 12 | 6 | 4 | 4 |
| catalog | 32, then 7 later (79.8 KiB) | 8 | 12 | 9 | 4 | 4 |
| product | 32, then 7 later (79.8 KiB) | 8 | 12 | 9 | 4 | 4 |
| search | 32, then 7 later (79.8 KiB) | 8 | 12 | 9 | 4 | 4 |
| primes | 32, then 7 later (79.8 KiB) | 8 | 10 | 8 | 4 | 4 |
| report | 32, then 7 later (79.8 KiB) | 8 | 11 | 9 | 4 | 4 |
| words | 32, then 7 later (79.8 KiB) | 8 | 10 | 8 | 4 | 4 |
| table | 32, then 7 later (79.8 KiB) | 8 | 11 | 9 | 4 | 4 |
The document, stylesheets, WebAssembly and scripts a browser fetches before the page is whole. Modules reached only through a dynamic import() follow as loaded later, gzipped.
