SnapFire FSR Requests per second benchmarks
Responses read in full per second at each number of concurrent clients.
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.
home: `/`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | 42,522 | 7,632 | 13,496 | 10,983 | 22,020 | 10,389 |
| 8 | 147,570 | 8,741 | 26,369 | 29,170 | 99,845 | 34,585 |
| 32 | 173,786 | 8,541 | 28,770 | 30,133 | 155,975 | 36,077 |
| 64 | 173,421 | 8,557 | 32,114 | 30,201 | 162,622 | 35,995 |
| 128 | 171,551 | 8,430 | 32,079 | 29,283 | 164,653 | 36,091 |
| 256 | 170,571 | 8,404 | 29,435 | 28,854 | 169,079 | 36,246 |
The landing page: a hero and three features, no data.
counter: `/counter`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | 42,403 | 7,602 | 14,694 | 10,865 | 23,910 | 11,068 |
| 8 | 148,067 | 8,623 | 30,502 | 28,784 | 102,435 | 34,746 |
| 32 | 174,002 | 8,644 | 31,196 | 29,812 | 157,534 | 36,088 |
| 64 | 172,775 | 8,632 | 31,756 | 29,670 | 163,478 | 36,238 |
| 128 | 171,468 | 8,547 | 32,016 | 29,000 | 167,743 | 36,344 |
| 256 | 169,971 | 8,451 | 29,176 | 28,392 | 168,051 | 36,604 |
A fixed page holding one component that hydrates in the browser.
catalog: `/products?sort=price`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | 6,972 | 826 | 5,872 | 1,765 | 4,138 | 3,330 |
| 8 | 37,399 | 904 | 6,441 | 2,055 | 23,157 | 14,066 |
| 32 | 60,123 | 881 | 6,487 | 1,999 | 35,330 | 13,006 |
| 64 | 59,279 | 865 | 6,436 | 1,868 | 35,408 | 13,013 |
| 128 | 58,858 | 851 | 6,167 | 1,929 | 35,044 | 13,049 |
| 256 | 57,869 | 830 | 6,156 | 1,916 | 33,814 | 13,002 |
All 48 products, sorted by the query.
product: `/products/cedar-lantern`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | 15,515 | 1,323 | 11,031 | 3,096 | 12,099 | 8,664 |
| 8 | 71,222 | 1,558 | 13,790 | 3,829 | 55,815 | 30,738 |
| 32 | 123,390 | 1,514 | 13,800 | 3,893 | 93,882 | 32,289 |
| 64 | 123,035 | 1,459 | 13,624 | 3,793 | 99,872 | 32,142 |
| 128 | 124,144 | 1,481 | 13,171 | 3,722 | 102,790 | 32,175 |
| 256 | 124,713 | 1,518 | 12,656 | 3,696 | 102,065 | 32,049 |
One product by its slug, with four related products.
search: `/search?q=pack`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | 12,459 | 1,291 | 9,678 | 2,732 | 9,099 | 6,815 |
| 8 | 60,966 | 1,482 | 11,317 | 3,379 | 45,691 | 25,539 |
| 32 | 105,675 | 1,472 | 11,520 | 3,344 | 78,166 | 26,985 |
| 64 | 105,765 | 1,402 | 11,440 | 3,246 | 79,932 | 26,811 |
| 128 | 106,410 | 1,412 | 11,146 | 3,239 | 79,564 | 26,927 |
| 256 | 107,395 | 1,414 | 10,714 | 3,169 | 80,449 | 26,017 |
Products whose name or tag matches the query.
missing: `/products/nope`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | 19,425 | 1,149 | 12,632 | 1,924 | 16,644 | 10,177 |
| 8 | 84,181 | 1,297 | 16,127 | 2,398 | 67,289 | 32,835 |
| 32 | 139,629 | 1,280 | 16,113 | 2,420 | 105,319 | 34,701 |
| 64 | 144,227 | 1,236 | 15,889 | 2,367 | 110,110 | 34,345 |
| 128 | 147,682 | 1,243 | 15,576 | 2,319 | 113,409 | 34,953 |
| 256 | 153,170 | 1,254 | 14,961 | 2,329 | 115,669 | 35,108 |
A slug with no product, answered 404.
api: `/api/products`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | 22,506 | 6,410 | 17,402 | 22,715 | 30,810 | 18,327 |
| 8 | 107,307 | 6,788 | 25,451 | 40,578 | 127,998 | 79,967 |
| 32 | 164,126 | 6,712 | 25,338 | 42,368 | 172,697 | 149,825 |
| 64 | 165,702 | 6,710 | 25,349 | 41,314 | 171,057 | 163,376 |
| 128 | 167,587 | 6,717 | 24,814 | 39,999 | 169,373 | 170,573 |
| 256 | 170,750 | 6,710 | 23,755 | 39,614 | 168,457 | 171,040 |
The catalog as JSON.
primes: `/compute/primes?n=50000`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | native 8,963203 | 963 | 2,435 | 1,498 | 8,218 | 6,203 |
| 8 | native 48,5231,310 | 1,061 | 2,768 | 1,835 | 42,043 | 29,294 |
| 32 | native 84,0041,937 | 1,062 | 2,564 | 1,742 | 73,409 | 31,566 |
| 64 | native 83,0551,894 | 1,049 | 2,531 | 1,720 | 73,763 | 32,048 |
| 128 | native 83,6661,872 | 1,047 | 2,754 | 1,815 | 73,737 | 31,923 |
| 256 | native 84,4041,863 | 1,054 | 2,766 | 1,815 | 73,489 | 31,952 |
A sieve of Eratosthenes up to the query's n: tight numeric loops over an array.
Under FSR's figure, marked native: the same page with its loader calling the Rust in shared/compute.rs through #[native], the code Leptos and Dioxus run. The view and the render are FSR's either way. It is ranked with the other figures.
report: `/compute/report?orders=5000`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | native 12,307621 | 1,372 | 8,665 | 3,053 | 10,499 | 7,751 |
| 8 | native 61,8834,380 | 1,551 | 10,183 | 3,841 | 51,338 | 30,923 |
| 32 | native 110,0276,596 | 1,562 | 10,147 | 3,789 | 88,265 | 32,928 |
| 64 | native 110,7226,436 | 1,523 | 10,004 | 3,645 | 90,790 | 33,102 |
| 128 | native 110,9286,541 | 1,487 | 9,787 | 3,589 | 92,004 | 32,953 |
| 256 | native 112,5096,555 | 1,481 | 9,522 | 3,645 | 92,903 | 32,923 |
Generated orders aggregated per product, sorted by revenue with a comparator and formatted.
Under FSR's figure, marked native: the same page with its loader calling the Rust in shared/compute.rs through #[native], the code Leptos and Dioxus run. The view and the render are FSR's either way. It is ranked with the other figures.
words: `/compute/words?passes=20`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | native 516139 | 433 | 577 | 542 | 542 | 520 |
| 8 | native 3,746958 | 454 | 601 | 555 | 4,037 | 3,890 |
| 32 | native 5,7491,476 | 450 | 594 | 551 | 5,900 | 5,180 |
| 64 | native 5,7461,455 | 449 | 601 | 545 | 5,913 | 5,057 |
| 128 | native 5,7291,450 | 452 | 591 | 555 | 5,886 | 5,172 |
| 256 | native 5,7101,449 | 450 | 518 | 489 | 5,818 | 5,081 |
Word frequencies over a built-up text: splitting, lowercasing and counting in an object.
Under FSR's figure, marked native: the same page with its loader calling the Rust in shared/compute.rs through #[native], the code Leptos and Dioxus run. The view and the render are FSR's either way. It is ranked with the other figures.
table: `/table?rows=500`
| Clients | fsr | nextjs | sveltekit | nuxt | leptos | dioxus |
|---|---|---|---|---|---|---|
| 1 | 1,500 | 167 | 1,092 | 1,172 | 1,518 | 1,368 |
| 8 | 10,776 | 172 | 1,159 | 1,287 | 10,311 | 8,872 |
| 32 | 16,129 | 181 | 1,132 | 1,243 | 14,217 | 10,834 |
| 64 | 15,893 | 184 | 1,150 | 1,223 | 14,013 | 10,763 |
| 128 | 15,698 | 186 | 1,157 | 1,233 | 14,137 | 10,686 |
| 256 | 15,724 | 169 | 1,160 | 1,248 | 14,127 | 10,803 |
500 rows rendered from simple data: the cost is the render, not the loader.
