Skip to content

Run Time Stats

Run Time benchmarks use purpose-built apps; see the Run Time methodology for setup details.

These CSR browser performance tests use Lighthouse to measure paint timings and a controlled navigation interaction.

Methodology: Client Side Rendered Tests (Lighthouse).

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.

Client First Paint (Lighthouse)
Client First Paint (Lighthouse) data
FrameworkMilliseconds
SolidStart87.00 ms
Pracht88.00 ms
Astro89.00 ms
Solid 2.098.00 ms
SvelteKit111.00 ms
TanStack Start130.00 ms
React Router164.00 ms
Nuxt175.00 ms
Next.js339.00 ms
Client FCP (Lighthouse)
Client FCP (Lighthouse) data
FrameworkMilliseconds
SolidStart86.78 ms
Pracht88.00 ms
Astro88.83 ms
Solid 2.097.74 ms
SvelteKit110.72 ms
TanStack Start130.12 ms
React Router163.81 ms
Nuxt174.56 ms
Next.js339.35 ms
Interaction Breakdown (Lighthouse)

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.
Interaction Breakdown (Lighthouse) data
FrameworkInput delayProcessing durationPresentation delay
Astro1.98 ms0.28 ms0.00 ms
Nuxt0.90 ms1.24 ms8.19 ms
Next.js1.40 ms5.41 ms8.19 ms
Solid 2.00.67 ms3.26 ms12.13 ms
SolidStart0.95 ms2.70 ms14.81 ms
React Router1.53 ms2.38 ms14.58 ms
SvelteKit0.93 ms1.70 ms17.47 ms
TanStack Start1.46 ms2.90 ms16.58 ms
Pracht0.74 ms2.46 ms18.73 ms

These SSR browser performance tests use Lighthouse to measure paint timings and a controlled navigation interaction.

Methodology: Server Side Rendered Tests (Lighthouse).

Server First Paint (Lighthouse)
Server First Paint (Lighthouse) data
FrameworkMilliseconds
Astro56.00 ms
SvelteKit75.00 ms
Solid 2.077.00 ms
SolidStart79.00 ms
Nuxt87.00 ms
TanStack Start88.00 ms
Pracht92.00 ms
Next.js97.00 ms
React Router109.00 ms
Server FCP (Lighthouse)
Server FCP (Lighthouse) data
FrameworkMilliseconds
Astro56.20 ms
SvelteKit75.37 ms
Solid 2.077.34 ms
SolidStart79.17 ms
Nuxt87.43 ms
TanStack Start88.32 ms
Pracht91.91 ms
Next.js96.83 ms
React Router109.24 ms
Interaction Breakdown (Lighthouse)

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.
Interaction Breakdown (Lighthouse) data
FrameworkInput delayProcessing durationPresentation delay
Astro0.74 ms0.24 ms0.00 ms
Nuxt0.77 ms1.67 ms7.32 ms
SvelteKit0.81 ms2.38 ms11.34 ms
SolidStart0.74 ms2.08 ms12.22 ms
Next.js1.27 ms5.04 ms8.82 ms
Solid 2.00.80 ms8.51 ms7.26 ms
React Router1.56 ms5.04 ms11.29 ms
Pracht1.88 ms4.22 ms14.01 ms
TanStack Start1.58 ms3.90 ms15.40 ms

Compare the resources transferred on a first visit to the same small, styled landing page. Sizes include response headers; lower is better. Inline CSS and JavaScript count toward HTML. Other includes images, media, fonts, and remaining resources. See Methodology for collection details.

Initial Load: All Resources
  • HTML
  • CSS
  • JavaScript
  • Other
Initial Load: All Resources data
FrameworkHTMLCSSJavaScriptOther
Astro3.28 KB0.00 KB0.00 KB0.00 KB
Next.js4.74 KB1.05 KB134.98 KB0.00 KB
Nuxt4.67 KB0.88 KB66.20 KB5.48 KB
Pracht1.19 KB1.18 KB19.06 KB0.00 KB
React Router2.45 KB1.00 KB118.19 KB0.00 KB
SolidStart2.65 KB0.88 KB30.26 KB0.00 KB
Solid 2.02.75 KB0.80 KB39.32 KB0.00 KB
SvelteKit3.11 KB0.86 KB34.35 KB0.00 KB
TanStack Start3.72 KB0.88 KB97.28 KB0.00 KB
Initial Load: Excluding JavaScript
  • HTML
  • CSS
  • Other
Initial Load: Excluding JavaScript data
FrameworkHTMLCSSOther
Astro3.28 KB0.00 KB0.00 KB
Next.js4.74 KB1.05 KB0.00 KB
Nuxt4.67 KB0.88 KB5.48 KB
Pracht1.19 KB1.18 KB0.00 KB
React Router2.45 KB1.00 KB0.00 KB
SolidStart2.65 KB0.88 KB0.00 KB
Solid 2.02.75 KB0.80 KB0.00 KB
SvelteKit3.11 KB0.86 KB0.00 KB
TanStack Start3.72 KB0.88 KB0.00 KB

Methodology: Server Side Throughput Tests.

Measures how many requests each framework’s server handler can process per second when rendering a 1,000-row table, and how long each response takes. Requests bypass network overhead to focus on server rendering performance.

Ops/sec
Ops/sec data
FrameworkOperations per second
Baseline HTML833
Astro771
Pracht590
Solid 2.0476
SvelteKit450
Nuxt406
SolidStart374
TanStack Start371
React Router360
Next.js140
Body Size
Body Size data
FrameworkKilobytes
Baseline HTML96.83 KB
Astro96.89 KB
SvelteKit184.30 KB
Pracht187.02 KB
TanStack Start192.78 KB
Nuxt201.80 KB
Next.js203.36 KB
React Router216.84 KB
Solid 2.0218.32 KB
SolidStart224.22 KB
Median Latency

Median of measured run average latencies; not a pooled request-level median.

Median Latency data
FrameworkMilliseconds
Baseline HTML1.21 ms
Astro1.44 ms
Pracht1.78 ms
SvelteKit2.25 ms
Solid 2.02.44 ms
Nuxt2.55 ms
TanStack Start2.72 ms
SolidStart2.76 ms
React Router2.79 ms
Next.js7.51 ms

Methodology: SSR Load Test.

Measures server throughput and response latency as concurrent connections increase, with each request rendering a 1,000-row table.

This version uses ordinary <a> links to measure server rendering without the extra work of rendering framework router link components.

Compare it with the router link load test to see how framework router link components affect server rendering performance.

P99 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Astro3.00 ms (v7.4.2)6.00 ms (v7.4.2)11.00 ms (v7.4.2)24.00 ms (v7.4.2)48.00 ms (v7.4.2)94.00 ms (v7.4.2)1490.00 ms (v7.4.2)
Baseline HTML2.00 ms (v24.22.1)6.00 ms (v24.22.1)8.00 ms (v24.22.1)17.00 ms (v24.22.1)34.00 ms (v24.22.1)94.00 ms (v24.22.1)380.00 ms (v24.22.1)
Next.js12.00 ms (v16.4.3)36.00 ms (v16.4.3)76.00 ms (v16.4.3)159.00 ms (v16.4.3)678.00 ms (v16.4.3)3124.00 ms (v16.4.3)4247.00 ms (v16.4.3)
Nuxt5.00 ms (v4.6.3)13.00 ms (v4.6.3)33.00 ms (v4.6.3)74.00 ms (v4.6.3)313.00 ms (v4.6.3)2680.00 ms (v4.6.3)2829.00 ms (v4.6.3)
Pracht4.00 ms (v0.18.0)11.00 ms (v0.18.0)17.00 ms (v0.18.0)42.00 ms (v0.18.0)112.00 ms (v0.18.0)1072.00 ms (v0.18.0)2908.00 ms (v0.18.0)
React Router5.00 ms (v8.5.1)20.00 ms (v8.5.1)37.00 ms (v8.5.1)102.00 ms (v8.5.1)482.00 ms (v8.5.1)3393.00 ms (v8.5.1)3523.00 ms (v8.5.1)
Solid 2.08.00 ms (v2.0.0-rc.21)18.00 ms (v2.0.0-rc.21)34.00 ms (v2.0.0-rc.21)79.00 ms (v2.0.0-rc.21)453.00 ms (v2.0.0-rc.21)3033.00 ms (v2.0.0-rc.21)2985.00 ms (v2.0.0-rc.21)
SolidStart5.00 ms (v2.1.0)18.00 ms (v2.1.0)35.00 ms (v2.1.0)95.00 ms (v2.1.0)376.00 ms (v2.1.0)2061.00 ms (v2.1.0)2132.00 ms (v2.1.0)
SvelteKit4.00 ms (v3.1.0)13.00 ms (v3.1.0)28.00 ms (v3.1.0)81.00 ms (v3.1.0)272.00 ms (v3.1.0)2077.00 ms (v3.1.0)2130.00 ms (v3.1.0)
TanStack Start5.00 ms (v1.169.4)24.00 ms (v1.169.4)47.00 ms (v1.169.4)122.00 ms (v1.169.4)235.00 ms (v1.169.4)2564.00 ms (v1.169.4)2577.00 ms (v1.169.4)
P90 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Astro1.00 ms (v7.4.2)4.00 ms (v7.4.2)8.00 ms (v7.4.2)17.00 ms (v7.4.2)31.00 ms (v7.4.2)63.00 ms (v7.4.2)109.00 ms (v7.4.2)
Baseline HTML1.00 ms (v24.22.1)3.00 ms (v24.22.1)6.00 ms (v24.22.1)16.00 ms (v24.22.1)29.00 ms (v24.22.1)69.00 ms (v24.22.1)153.00 ms (v24.22.1)
Next.js9.00 ms (v16.4.3)28.00 ms (v16.4.3)58.00 ms (v16.4.3)116.00 ms (v16.4.3)232.00 ms (v16.4.3)473.00 ms (v16.4.3)575.00 ms (v16.4.3)
Nuxt3.00 ms (v4.6.3)11.00 ms (v4.6.3)20.00 ms (v4.6.3)48.00 ms (v4.6.3)105.00 ms (v4.6.3)190.00 ms (v4.6.3)189.00 ms (v4.6.3)
Pracht3.00 ms (v0.18.0)8.00 ms (v0.18.0)16.00 ms (v0.18.0)38.00 ms (v0.18.0)77.00 ms (v0.18.0)155.00 ms (v0.18.0)206.00 ms (v0.18.0)
React Router4.00 ms (v8.5.1)16.00 ms (v8.5.1)30.00 ms (v8.5.1)73.00 ms (v8.5.1)144.00 ms (v8.5.1)286.00 ms (v8.5.1)279.00 ms (v8.5.1)
Solid 2.03.00 ms (v2.0.0-rc.21)14.00 ms (v2.0.0-rc.21)25.00 ms (v2.0.0-rc.21)65.00 ms (v2.0.0-rc.21)128.00 ms (v2.0.0-rc.21)199.00 ms (v2.0.0-rc.21)201.00 ms (v2.0.0-rc.21)
SolidStart3.00 ms (v2.1.0)11.00 ms (v2.1.0)24.00 ms (v2.1.0)67.00 ms (v2.1.0)142.00 ms (v2.1.0)156.00 ms (v2.1.0)142.00 ms (v2.1.0)
SvelteKit3.00 ms (v3.1.0)9.00 ms (v3.1.0)19.00 ms (v3.1.0)57.00 ms (v3.1.0)122.00 ms (v3.1.0)183.00 ms (v3.1.0)195.00 ms (v3.1.0)
TanStack Start3.00 ms (v1.169.4)16.00 ms (v1.169.4)30.00 ms (v1.169.4)86.00 ms (v1.169.4)182.00 ms (v1.169.4)236.00 ms (v1.169.4)236.00 ms (v1.169.4)
P75 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Astro1.00 ms (v7.4.2)4.00 ms (v7.4.2)7.00 ms (v7.4.2)16.00 ms (v7.4.2)31.00 ms (v7.4.2)61.00 ms (v7.4.2)101.00 ms (v7.4.2)
Baseline HTML1.00 ms (v24.22.1)3.00 ms (v24.22.1)6.00 ms (v24.22.1)14.00 ms (v24.22.1)29.00 ms (v24.22.1)57.00 ms (v24.22.1)126.00 ms (v24.22.1)
Next.js8.00 ms (v16.4.3)23.00 ms (v16.4.3)42.00 ms (v16.4.3)106.00 ms (v16.4.3)215.00 ms (v16.4.3)461.00 ms (v16.4.3)528.00 ms (v16.4.3)
Nuxt3.00 ms (v4.6.3)9.00 ms (v4.6.3)20.00 ms (v4.6.3)47.00 ms (v4.6.3)93.00 ms (v4.6.3)165.00 ms (v4.6.3)171.00 ms (v4.6.3)
Pracht2.00 ms (v0.18.0)8.00 ms (v0.18.0)15.00 ms (v0.18.0)37.00 ms (v0.18.0)74.00 ms (v0.18.0)145.00 ms (v0.18.0)187.00 ms (v0.18.0)
React Router3.00 ms (v8.5.1)15.00 ms (v8.5.1)29.00 ms (v8.5.1)71.00 ms (v8.5.1)142.00 ms (v8.5.1)258.00 ms (v8.5.1)256.00 ms (v8.5.1)
Solid 2.03.00 ms (v2.0.0-rc.21)14.00 ms (v2.0.0-rc.21)24.00 ms (v2.0.0-rc.21)60.00 ms (v2.0.0-rc.21)119.00 ms (v2.0.0-rc.21)182.00 ms (v2.0.0-rc.21)183.00 ms (v2.0.0-rc.21)
SolidStart2.00 ms (v2.1.0)10.00 ms (v2.1.0)20.00 ms (v2.1.0)57.00 ms (v2.1.0)90.00 ms (v2.1.0)125.00 ms (v2.1.0)122.00 ms (v2.1.0)
SvelteKit2.00 ms (v3.1.0)9.00 ms (v3.1.0)17.00 ms (v3.1.0)43.00 ms (v3.1.0)98.00 ms (v3.1.0)142.00 ms (v3.1.0)135.00 ms (v3.1.0)
TanStack Start3.00 ms (v1.169.4)14.00 ms (v1.169.4)27.00 ms (v1.169.4)68.00 ms (v1.169.4)144.00 ms (v1.169.4)165.00 ms (v1.169.4)189.00 ms (v1.169.4)

Methodology: SSR Router Link Load Test.

Measures server throughput and response latency as concurrent connections increase, with each request rendering a 1,000-row table using framework router link components.

Compare it with the plain link load test to see how these components affect server rendering performance. These tests make HTTP requests only; they do not measure browser navigation or prefetching.

Frameworks without a router link component are excluded.

P99 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js12.00 ms (v16.4.3)48.00 ms (v16.4.3)92.00 ms (v16.4.3)278.00 ms (v16.4.3)1125.00 ms (v16.4.3)3965.00 ms (v16.4.3)4297.00 ms (v16.4.3)
Nuxt9.00 ms (v4.6.3)48.00 ms (v4.6.3)88.00 ms (v4.6.3)554.00 ms (v4.6.3)3066.00 ms (v4.6.3)3748.00 ms (v4.6.3)3818.00 ms (v4.6.3)
Pracht8.00 ms (v0.18.0)24.00 ms (v0.18.0)37.00 ms (v0.18.0)90.00 ms (v0.18.0)374.00 ms (v0.18.0)2453.00 ms (v0.18.0)3356.00 ms (v0.18.0)
React Router13.00 ms (v8.5.1)49.00 ms (v8.5.1)77.00 ms (v8.5.1)321.00 ms (v8.5.1)2119.00 ms (v8.5.1)3972.00 ms (v8.5.1)3995.00 ms (v8.5.1)
TanStack Start7.00 ms (v1.169.4)31.00 ms (v1.169.4)72.00 ms (v1.169.4)195.00 ms (v1.169.4)1221.00 ms (v1.169.4)3100.00 ms (v1.169.4)2874.00 ms (v1.169.4)
P90 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js10.00 ms (v16.4.3)37.00 ms (v16.4.3)67.00 ms (v16.4.3)146.00 ms (v16.4.3)350.00 ms (v16.4.3)584.00 ms (v16.4.3)667.00 ms (v16.4.3)
Nuxt8.00 ms (v4.6.3)33.00 ms (v4.6.3)63.00 ms (v4.6.3)159.00 ms (v4.6.3)321.00 ms (v4.6.3)334.00 ms (v4.6.3)330.00 ms (v4.6.3)
Pracht5.00 ms (v0.18.0)19.00 ms (v0.18.0)32.00 ms (v0.18.0)63.00 ms (v0.18.0)132.00 ms (v0.18.0)251.00 ms (v0.18.0)292.00 ms (v0.18.0)
React Router8.00 ms (v8.5.1)31.00 ms (v8.5.1)63.00 ms (v8.5.1)178.00 ms (v8.5.1)302.00 ms (v8.5.1)416.00 ms (v8.5.1)384.00 ms (v8.5.1)
TanStack Start5.00 ms (v1.169.4)21.00 ms (v1.169.4)48.00 ms (v1.169.4)123.00 ms (v1.169.4)258.00 ms (v1.169.4)311.00 ms (v1.169.4)327.00 ms (v1.169.4)
P75 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js9.00 ms (v16.4.3)30.00 ms (v16.4.3)57.00 ms (v16.4.3)141.00 ms (v16.4.3)302.00 ms (v16.4.3)552.00 ms (v16.4.3)566.00 ms (v16.4.3)
Nuxt7.00 ms (v4.6.3)32.00 ms (v4.6.3)62.00 ms (v4.6.3)150.00 ms (v4.6.3)307.00 ms (v4.6.3)304.00 ms (v4.6.3)301.00 ms (v4.6.3)
Pracht4.00 ms (v0.18.0)18.00 ms (v0.18.0)28.00 ms (v0.18.0)62.00 ms (v0.18.0)124.00 ms (v0.18.0)243.00 ms (v0.18.0)253.00 ms (v0.18.0)
React Router7.00 ms (v8.5.1)29.00 ms (v8.5.1)61.00 ms (v8.5.1)157.00 ms (v8.5.1)291.00 ms (v8.5.1)381.00 ms (v8.5.1)368.00 ms (v8.5.1)
TanStack Start4.00 ms (v1.169.4)19.00 ms (v1.169.4)40.00 ms (v1.169.4)105.00 ms (v1.169.4)212.00 ms (v1.169.4)240.00 ms (v1.169.4)214.00 ms (v1.169.4)