Run Time Stats
Client Side Rendered Tests
Section titled “Client Side Rendered Tests”Methodology: Client Side Rendered Tests.
Some frameworks have been moved off their golden path to make client side tests fair when comparing. See the methodology link above for the full details.
| Framework | First Paint | FCP | Interaction Latency | Input Delay | Processing Duration | Presentation Delay |
|---|---|---|---|---|---|---|
| Astro | 112.6ms | 112.62ms | 1.94ms | 1.63ms | 0.31ms | 0ms |
| Next.js | 338.2ms | 338.17ms | 18.03ms | 1.25ms | 6.95ms | 9.83ms |
| Nuxt | 153.8ms | 153.93ms | 9.83ms | 1.44ms | 1.5ms | 6.89ms |
| React Router | 165.2ms | 165.35ms | 19.37ms | 2.76ms | 2.91ms | 13.7ms |
| SolidStart | 103.6ms | 103.45ms | 18.43ms | 0.9ms | 3.08ms | 14.46ms |
| SvelteKit | 121.4ms | 121.44ms | 15.18ms | 0.65ms | 2.97ms | 11.56ms |
| TanStack Start | 149.6ms | 149.73ms | 22.2ms | 2.09ms | 12.22ms | 7.89ms |
First Paint (ms)
| Framework | Milliseconds |
|---|---|
| SolidStart | 103.60 ms |
| Astro | 112.60 ms |
| SvelteKit | 121.40 ms |
| TanStack Start | 149.60 ms |
| Nuxt | 153.80 ms |
| React Router | 165.20 ms |
| Next.js | 338.20 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
First Contentful Paint (ms)
| Framework | Milliseconds |
|---|---|
| SolidStart | 103.45 ms |
| Astro | 112.62 ms |
| SvelteKit | 121.44 ms |
| TanStack Start | 149.73 ms |
| Nuxt | 153.93 ms |
| React Router | 165.35 ms |
| Next.js | 338.17 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Interaction Breakdown
Total latency is split into the three consecutive phases reported by Lighthouse.
- The input delay, which starts when the user initiates an interaction with the page, and ends when the event callbacks for the interaction begin to run.
- The processing duration, which consists of the time it takes for event callbacks to run to completion.
- The presentation delay, which is the time it takes for the browser to present the next frame which contains the visual result of the interaction.
| Framework or version | Interaction latency | Input delay | Processing duration | Presentation delay |
|---|---|---|---|---|
| Astro | 1.94 ms | 1.63 ms | 0.31 ms | 0.00 ms |
| Nuxt | 9.83 ms | 1.44 ms | 1.50 ms | 6.89 ms |
| SvelteKit | 15.18 ms | 0.65 ms | 2.97 ms | 11.56 ms |
| Next.js | 18.03 ms | 1.25 ms | 6.95 ms | 9.83 ms |
| SolidStart | 18.43 ms | 0.90 ms | 3.08 ms | 14.46 ms |
| React Router | 19.37 ms | 2.76 ms | 2.91 ms | 13.70 ms |
| TanStack Start | 22.20 ms | 2.09 ms | 12.22 ms | 7.89 ms |
Server Side Rendered Tests
Section titled “Server Side Rendered Tests”Methodology: Server Side Rendered Tests.
| Framework | First Paint | FCP | Interaction Latency | Input Delay | Processing Duration | Presentation Delay |
|---|---|---|---|---|---|---|
| Astro | 68.6ms | 68.58ms | 0.88ms | 0.61ms | 0.27ms | 0ms |
| Next.js | 152ms | 151.84ms | 19.5ms | 1.34ms | 6.94ms | 11.22ms |
| Nuxt | 101.2ms | 101.32ms | 9.2ms | 0.46ms | 1.43ms | 7.31ms |
| React Router | 137.2ms | 137.3ms | 21.47ms | 1.6ms | 3.26ms | 16.6ms |
| SolidStart | 88.4ms | 88.27ms | 15.14ms | 0.82ms | 1.99ms | 12.33ms |
| SvelteKit | 94.4ms | 94.49ms | 15.54ms | 1.07ms | 3.57ms | 10.9ms |
| TanStack Start | 131.4ms | 131.34ms | 25.87ms | 1.6ms | 13.21ms | 11.06ms |
First Paint (ms)
| Framework | Milliseconds |
|---|---|
| Astro | 68.60 ms |
| SolidStart | 88.40 ms |
| SvelteKit | 94.40 ms |
| Nuxt | 101.20 ms |
| TanStack Start | 131.40 ms |
| React Router | 137.20 ms |
| Next.js | 152.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
First Contentful Paint (ms)
| Framework | Milliseconds |
|---|---|
| Astro | 68.58 ms |
| SolidStart | 88.27 ms |
| SvelteKit | 94.49 ms |
| Nuxt | 101.32 ms |
| TanStack Start | 131.34 ms |
| React Router | 137.30 ms |
| Next.js | 151.84 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Interaction Breakdown
Total latency is split into the three consecutive phases reported by Lighthouse.
- The input delay, which starts when the user initiates an interaction with the page, and ends when the event callbacks for the interaction begin to run.
- The processing duration, which consists of the time it takes for event callbacks to run to completion.
- The presentation delay, which is the time it takes for the browser to present the next frame which contains the visual result of the interaction.
| Framework or version | Interaction latency | Input delay | Processing duration | Presentation delay |
|---|---|---|---|---|
| Astro | 0.88 ms | 0.61 ms | 0.27 ms | 0.00 ms |
| Nuxt | 9.20 ms | 0.46 ms | 1.43 ms | 7.31 ms |
| SolidStart | 15.14 ms | 0.82 ms | 1.99 ms | 12.33 ms |
| SvelteKit | 15.54 ms | 1.07 ms | 3.57 ms | 10.90 ms |
| Next.js | 19.50 ms | 1.34 ms | 6.94 ms | 11.22 ms |
| React Router | 21.47 ms | 1.60 ms | 3.26 ms | 16.60 ms |
| TanStack Start | 25.87 ms | 1.60 ms | 13.21 ms | 11.06 ms |
Server Side Throughput Tests
Section titled “Server Side Throughput Tests”Methodology: Server Side Throughput Tests.
| Framework | Ops/sec | Median Latency | Body Size | Duplication |
|---|---|---|---|---|
| Baseline HTML | 846 | 1.202ms | 96.83kb | 1x |
| Astro | 664 | 1.439ms | 96.89kb | 1x |
| Next.js | 215 | 4.732ms | 199.57kb | 2x |
| Nuxt | 350 | 2.738ms | 201.27kb | 2x |
| React Router | 341 | 2.885ms | 212.07kb | 2x |
| SolidStart | 416 | 2.304ms | 224.17kb | 2x |
| SvelteKit | 439 | 2.209ms | 183.53kb | 2x |
| TanStack Start | 322 | 3.071ms | 193.62kb | 2x |
Ops/sec
| Framework | Operations per second |
|---|---|
| Baseline HTML | 846 |
| Astro | 664 |
| SvelteKit | 439 |
| SolidStart | 416 |
| Nuxt | 350 |
| React Router | 341 |
| TanStack Start | 322 |
| Next.js | 215 |
The chart includes a dotted median reference line calculated from the visible framework values.
Body Size
| Framework | Kilobytes |
|---|---|
| Baseline HTML | 96.83 KB |
| Astro | 96.89 KB |
| SvelteKit | 183.53 KB |
| TanStack Start | 193.62 KB |
| Next.js | 199.57 KB |
| Nuxt | 201.27 KB |
| React Router | 212.07 KB |
| SolidStart | 224.17 KB |
The chart includes a dotted median reference line calculated from the visible framework values.
Median Latency
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 1.20 ms |
| Astro | 1.44 ms |
| SvelteKit | 2.21 ms |
| SolidStart | 2.30 ms |
| Nuxt | 2.74 ms |
| React Router | 2.88 ms |
| TanStack Start | 3.07 ms |
| Next.js | 4.73 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
SSR Load Test
Section titled “SSR Load Test”Methodology: SSR Load Test.
All eight frameworks render the same 1,000-row, three-column table using ordinary
<a> links. This compares server rendering under HTTP load without the extra
work of rendering framework router link components. Requests still pass through
each framework’s server routing. No browser runs and no links are clicked.
| Framework | Peak req/s | Peak Connections | P99 @ 25 | P99 @ 50 | P99 @ 100 | Total Req. |
|---|---|---|---|---|---|---|
| Baseline HTML | 1,680.8 | 200 | 20ms | 46ms | 104ms | 48,986 |
| Astro | 1,162.2 | 100 | 32ms | 66ms | 289ms | 35,518 |
| Next.js | 45.2 | 5 | 1713ms | 4654ms | 4777ms | 1,298 |
| Nuxt | 479.2 | 50 | 83ms | 135ms | 2871ms | 15,535 |
| React Router | 337.6 | 10 | 107ms | 184ms | 3539ms | 11,058 |
| SolidStart | 516.6 | 10 | 98ms | 403ms | 2221ms | 16,823 |
| SvelteKit | 453.2 | 100 | 100ms | 622ms | 2557ms | 14,475 |
| TanStack Start | 293.61 | 10 | 172ms | 1463ms | 2803ms | 9,658 |
P99 Latency
Section titled “P99 Latency”P99 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 20.00 ms |
| Astro | 32.00 ms |
| Nuxt | 83.00 ms |
| SolidStart | 98.00 ms |
| SvelteKit | 100.00 ms |
| React Router | 107.00 ms |
| TanStack Start | 172.00 ms |
| Next.js | 1713.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 46.00 ms |
| Astro | 66.00 ms |
| Nuxt | 135.00 ms |
| React Router | 184.00 ms |
| SolidStart | 403.00 ms |
| SvelteKit | 622.00 ms |
| TanStack Start | 1463.00 ms |
| Next.js | 4654.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 104.00 ms |
| Astro | 289.00 ms |
| SolidStart | 2221.00 ms |
| SvelteKit | 2557.00 ms |
| TanStack Start | 2803.00 ms |
| Nuxt | 2871.00 ms |
| React Router | 3539.00 ms |
| Next.js | 4777.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency
Section titled “P90 Latency”P90 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 18.00 ms |
| Astro | 24.00 ms |
| Nuxt | 56.00 ms |
| SolidStart | 71.00 ms |
| SvelteKit | 73.00 ms |
| React Router | 75.00 ms |
| TanStack Start | 123.00 ms |
| Next.js | 619.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 35.00 ms |
| Astro | 46.00 ms |
| Nuxt | 105.00 ms |
| SvelteKit | 135.00 ms |
| React Router | 150.00 ms |
| SolidStart | 152.00 ms |
| TanStack Start | 256.00 ms |
| Next.js | 2275.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 81.00 ms |
| Astro | 88.00 ms |
| SolidStart | 162.00 ms |
| Nuxt | 192.00 ms |
| SvelteKit | 224.00 ms |
| TanStack Start | 274.00 ms |
| React Router | 280.00 ms |
| Next.js | 2467.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P75 Latency
Section titled “P75 Latency”P75 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 17.00 ms |
| Astro | 22.00 ms |
| Nuxt | 54.00 ms |
| SolidStart | 59.00 ms |
| SvelteKit | 66.00 ms |
| React Router | 73.00 ms |
| TanStack Start | 98.00 ms |
| Next.js | 611.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P75 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 34.00 ms |
| Astro | 44.00 ms |
| SolidStart | 91.00 ms |
| Nuxt | 102.00 ms |
| SvelteKit | 114.00 ms |
| React Router | 147.00 ms |
| TanStack Start | 156.00 ms |
| Next.js | 1076.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P75 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| Baseline HTML | 66.00 ms |
| Astro | 85.00 ms |
| SolidStart | 128.00 ms |
| TanStack Start | 164.00 ms |
| Nuxt | 175.00 ms |
| SvelteKit | 178.00 ms |
| React Router | 257.00 ms |
| Next.js | 1043.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
SSR Router Link Load Test
Section titled “SSR Router Link Load Test”Methodology: SSR Router Link Load Test.
The same load test using framework router link components, showing how rendering those components affects server performance compared with ordinary HTML links.
| Framework | Peak req/s | Peak Connections | P99 @ 25 | P99 @ 50 | P99 @ 100 | Total Req. |
|---|---|---|---|---|---|---|
| Next.js | 42 | 1 | 1966ms | 4726ms | 4682ms | 1,171 |
| Nuxt | 71.8 | 5 | 1947ms | 4114ms | 4224ms | 2,286 |
| React Router | 176.6 | 50 | 309ms | 298ms | 3843ms | 5,584 |
| TanStack Start | 45.6 | 5 | 3878ms | 4100ms | 4678ms | 1,426 |
P99 Latency
Section titled “P99 Latency”P99 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 309.00 ms |
| Nuxt | 1947.00 ms |
| Next.js | 1966.00 ms |
| TanStack Start | 3878.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 298.00 ms |
| TanStack Start | 4100.00 ms |
| Nuxt | 4114.00 ms |
| Next.js | 4726.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P99 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 3843.00 ms |
| Nuxt | 4224.00 ms |
| TanStack Start | 4678.00 ms |
| Next.js | 4682.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency
Section titled “P90 Latency”P90 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 150.00 ms |
| Nuxt | 365.00 ms |
| Next.js | 700.00 ms |
| TanStack Start | 711.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 289.00 ms |
| Nuxt | 508.00 ms |
| TanStack Start | 660.00 ms |
| Next.js | 2384.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P90 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 393.00 ms |
| Nuxt | 614.00 ms |
| TanStack Start | 1302.00 ms |
| Next.js | 2759.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P75 Latency
Section titled “P75 Latency”P75 Latency at 25 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 143.00 ms |
| Nuxt | 338.00 ms |
| TanStack Start | 509.00 ms |
| Next.js | 691.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P75 Latency at 50 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 283.00 ms |
| Nuxt | 457.00 ms |
| TanStack Start | 547.00 ms |
| Next.js | 1147.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
P75 Latency at 100 Connections
| Framework | Milliseconds |
|---|---|
| React Router | 356.00 ms |
| Nuxt | 446.00 ms |
| TanStack Start | 508.00 ms |
| Next.js | 1077.00 ms |
The chart includes a dotted median reference line calculated from the visible framework values.
Core Web Vitals
Section titled “Core Web Vitals”CWV Desktop
Section titled “CWV Desktop”| Framework | LCP% | CLS% | FCP% | TTFB% | INP% |
|---|---|---|---|---|---|
| Astro | 93 | 89 | 92 | 81 | 98 |
| SolidStart | 100 | 77 | 100 | 85 | 100 |
| SvelteKit | 79 | 78 | 77 | 68 | 95 |
| Next.js | 74 | 72 | 76 | 66 | 94 |
| TanStack Start | 55 | 81 | 46 | 29 | 91 |
| Nuxt | 68 | 58 | 69 | 59 | 96 |
| React Router | 59 | 61 | 65 | 68 | 90 |
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.
| Framework | % |
|---|---|
| SolidStart | 100 |
| Astro | 93 |
| SvelteKit | 79 |
| Next.js | 74 |
| Nuxt | 68 |
| React Router | 59 |
| TanStack Start | 55 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| Astro | 89 |
| TanStack Start | 81 |
| SvelteKit | 78 |
| SolidStart | 77 |
| Next.js | 72 |
| React Router | 61 |
| Nuxt | 58 |
The chart includes a dotted median reference line calculated from the visible framework values.
Good First Contentful Paint
Measures initial loading speed. To provide a good user experience, the FCP should be 1.8 seconds or less.
| Framework | % |
|---|---|
| SolidStart | 100 |
| Astro | 92 |
| SvelteKit | 77 |
| Next.js | 76 |
| Nuxt | 69 |
| React Router | 65 |
| TanStack Start | 46 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| SolidStart | 85 |
| Astro | 81 |
| SvelteKit | 68 |
| React Router | 68 |
| Next.js | 66 |
| Nuxt | 59 |
| TanStack Start | 29 |
The chart includes a dotted median reference line calculated from the visible framework values.
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 | % |
|---|---|
| SolidStart | 100 |
| Astro | 98 |
| Nuxt | 96 |
| SvelteKit | 95 |
| Next.js | 94 |
| TanStack Start | 91 |
| React Router | 90 |
The chart includes a dotted median reference line calculated from the visible framework values.
CWV Mobile
Section titled “CWV Mobile”| Framework | LCP% | CLS% | FCP% | TTFB% | INP% |
|---|---|---|---|---|---|
| Astro | 80 | 93 | 73 | 64 | 85 |
| SolidStart | 88 | 66 | 88 | 85 | 75 |
| SvelteKit | 67 | 81 | 58 | 54 | 74 |
| Next.js | 53 | 72 | 48 | 45 | 59 |
| Nuxt | 46 | 59 | 44 | 46 | 65 |
| React Router | 37 | 63 | 37 | 50 | 53 |
| TanStack Start | 31 | 84 | 19 | 13 | 51 |
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.
| Framework | % |
|---|---|
| SolidStart | 88 |
| Astro | 80 |
| SvelteKit | 67 |
| Next.js | 53 |
| Nuxt | 46 |
| React Router | 37 |
| TanStack Start | 31 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| Astro | 93 |
| TanStack Start | 84 |
| SvelteKit | 81 |
| Next.js | 72 |
| SolidStart | 66 |
| React Router | 63 |
| Nuxt | 59 |
The chart includes a dotted median reference line calculated from the visible framework values.
Good First Contentful Paint
Measures initial loading speed. To provide a good user experience, the FCP should be 1.8 seconds or less.
| Framework | % |
|---|---|
| SolidStart | 88 |
| Astro | 73 |
| SvelteKit | 58 |
| Next.js | 48 |
| Nuxt | 44 |
| React Router | 37 |
| TanStack Start | 19 |
The chart includes a dotted median reference line calculated from the visible framework values.
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.
| Framework | % |
|---|---|
| SolidStart | 85 |
| Astro | 64 |
| SvelteKit | 54 |
| React Router | 50 |
| Nuxt | 46 |
| Next.js | 45 |
| TanStack Start | 13 |
The chart includes a dotted median reference line calculated from the visible framework values.
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 | % |
|---|---|
| Astro | 85 |
| SolidStart | 75 |
| SvelteKit | 74 |
| Nuxt | 65 |
| Next.js | 59 |
| React Router | 53 |
| TanStack Start | 51 |
The chart includes a dotted median reference line calculated from the visible framework values.
Methodology: Core Web Vitals.