Run Time Stats
Client Side Rendered Tests
Methodology: Client Side Rendered Tests.
First Paint (ms)
First Contentful Paint (ms)
Interaction to Next Paint (ms)
| Framework | First Paint | FCP | INP |
|---|---|---|---|
| Astro | 87.6ms | 87.66ms | 4.22ms |
| Next.js | 348.6ms | 348.42ms | 16.34ms |
| Nuxt | 170.8ms | 170.54ms | 10.9ms |
| React Router | 146.6ms | 146.41ms | 14.59ms |
| SolidStart | 108.2ms | 108.18ms | 15.9ms |
| SvelteKit | 115.4ms | 115.56ms | 12.38ms |
| TanStack Start | 154.2ms | 154.26ms | 31.94ms |
Server Side Rendered Tests
Methodology: Server Side Rendered Tests.
First Paint (ms)
First Contentful Paint (ms)
Interaction to Next Paint (ms)
| Framework | First Paint | FCP | INP |
|---|---|---|---|
| Astro | 67.6ms | 67.51ms | 0.46ms |
| Next.js | 151ms | 150.78ms | 22.09ms |
| Nuxt | 94.2ms | 94.23ms | 11.44ms |
| React Router | 90ms | 89.78ms | 20.4ms |
| SolidStart | 97.8ms | 97.62ms | 16.17ms |
| SvelteKit | 87.6ms | 87.46ms | 13.19ms |
| TanStack Start | 115ms | 114.84ms | 26.13ms |
Server Side Throughput Tests
Methodology: Server Side Throughput Tests.
Ops/sec
Body Size
Median Latency
| Framework | Ops/sec | Median Latency | Body Size | Duplication |
|---|---|---|---|---|
| Baseline HTML | 848 | 1.199ms | 96.83kb | 1x |
| Astro | 510 | 1.901ms | 99.82kb | 1x |
| Mastro | 515 | 1.912ms | 181.95kb | 1x |
| Next.js | 212 | 4.833ms | 199.57kb | 2x |
| Nuxt | 349 | 2.769ms | 201.27kb | 2x |
| React Router | 347 | 2.855ms | 211.63kb | 2x |
| SolidStart | 384 | 2.546ms | 230.24kb | 2x |
| SvelteKit | 433 | 2.239ms | 183.49kb | 2x |
| TanStack Start | 314 | 3.144ms | 193.62kb | 2x |
Server Side Load Test
Methodology: Server Side Load Test.
P99 Latency
P99 Latency at 25 Connections
P99 Latency at 50 Connections
P99 Latency at 100 Connections
P90 Latency
P90 Latency at 25 Connections
P90 Latency at 50 Connections
P90 Latency at 100 Connections
| Framework | Peak req/s | Peak Connections | P99 @ 25 | P99 @ 50 | P99 @ 100 | Total Req. |
|---|---|---|---|---|---|---|
| Baseline HTML | 1,677 | 100 | 18ms | 39ms | 97ms | 49,383 |
| Astro | 692.4 | 25 | 57ms | 123ms | 1786ms | 20,902 |
| Next.js | 36 | 1 | 2181ms | 4678ms | 4748ms | 990 |
| Nuxt | 64.8 | 10 | 2169ms | 4174ms | 4286ms | 2,035 |
| React Router | 165 | 25 | 351ms | 1743ms | 3779ms | 5,456 |
| SolidStart | 62.2 | 25 | 3345ms | 3802ms | 4034ms | 2,003 |
| SvelteKit | 494 | 25 | 76ms | 464ms | 2831ms | 15,728 |
| TanStack Start | 42 | 5 | 3827ms | 4376ms | 4251ms | 1,298 |
CWV Desktop
Good Largest Contentful Paint
Measures how fast a page's main content loads. To provide a good user experience, the LCP should be 2.5 seconds or less.
Good Cumulative Layout Shift
Measures how much and how far content unexpectedly moves on a page. To provide a good user experience, sites should maintain a CLS score of 0.1 or less for at least 75% of page visits.
Good First Contentful Paint
Measures initial loading speed. To provide a good user experience, the FCP should be 1.8 seconds or less.
Good Time To First Byte
Measures the time between the request for a resource and when the first byte of a response begins to arrive. A good TTFB is less than or equal to 800ms.
Good Interaction to Next Paint
Measures overall page responsiveness to user actions. To provide a good user experience, the INP should be 200ms or less.
| Framework | LCP% | CLS% | FCP% | TTFB% | INP% |
|---|---|---|---|---|---|
| Astro | 91 | 87 | 91 | 82 | 97 |
| SolidStart | 91 | 66 | 91 | 83 | 100 |
| SvelteKit | 79 | 77 | 78 | 71 | 94 |
| Next.js | 72 | 69 | 76 | 67 | 94 |
| React Router | 61 | 62 | 66 | 70 | 90 |
| Nuxt.js | 65 | 57 | 67 | 59 | 95 |
CWV Mobile
Good Largest Contentful Paint
Measures how fast a page's main content loads. To provide a good user experience, the LCP should be 2.5 seconds or less.
Good Cumulative Layout Shift
Measures how much and how far content unexpectedly moves on a page. To provide a good user experience, sites should maintain a CLS score of 0.1 or less for at least 75% of page visits.
Good First Contentful Paint
Measures initial loading speed. To provide a good user experience, the FCP should be 1.8 seconds or less.
Good Time To First Byte
Measures the time between the request for a resource and when the first byte of a response begins to arrive. A good TTFB is less than or equal to 800ms.
Good Interaction to Next Paint
Measures overall page responsiveness to user actions. To provide a good user experience, the INP should be 200ms or less.
| Framework | LCP% | CLS% | FCP% | TTFB% | INP% |
|---|---|---|---|---|---|
| Astro | 77 | 92 | 71 | 60 | 86 |
| SolidStart | 90 | 63 | 90 | 81 | 100 |
| SvelteKit | 67 | 81 | 60 | 58 | 75 |
| Next.js | 51 | 69 | 50 | 47 | 58 |
| Nuxt.js | 45 | 58 | 43 | 45 | 65 |
| React Router | 41 | 64 | 41 | 53 | 56 |
Methodology: Core Web Vitals.