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.

FrameworkFirst PaintFCPInteraction LatencyInput DelayProcessing DurationPresentation Delay
Astro110ms109.854ms2.346ms2.053ms0.293ms0ms
Next.js341ms340.673ms14.941ms1.453ms3.146ms10.342ms
Nuxt164ms163.507ms10.036ms0.93ms1.331ms7.775ms
Pracht97ms96.757ms20.475ms0.839ms2.272ms17.364ms
React Router169ms168.869ms18.088ms1.681ms3.331ms13.076ms
SolidStart96ms95.892ms18.666ms0.759ms2.705ms15.202ms
Solid 2.0115ms114.833ms15.734ms0.449ms4.393ms10.892ms
SvelteKit130ms130.4ms22.971ms1.086ms2.098ms19.787ms
TanStack Start135ms135.052ms20.444ms1.454ms4.022ms14.968ms
Client First Paint (Lighthouse)
Client First Paint (Lighthouse) data
FrameworkMilliseconds
SolidStart96.00 ms
Pracht97.00 ms
Astro110.00 ms
Solid 2.0115.00 ms
SvelteKit130.00 ms
TanStack Start135.00 ms
Nuxt164.00 ms
React Router169.00 ms
Next.js341.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Client FCP (Lighthouse)
Client FCP (Lighthouse) data
FrameworkMilliseconds
SolidStart95.89 ms
Pracht96.76 ms
Astro109.85 ms
Solid 2.0114.83 ms
SvelteKit130.40 ms
TanStack Start135.05 ms
Nuxt163.51 ms
React Router168.87 ms
Next.js340.67 ms

The chart includes a dotted median reference line calculated from the visible framework values.

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
Astro2.05 ms0.29 ms0.00 ms
Nuxt0.93 ms1.33 ms7.78 ms
Next.js1.45 ms3.15 ms10.34 ms
Solid 2.00.45 ms4.39 ms10.89 ms
React Router1.68 ms3.33 ms13.08 ms
SolidStart0.76 ms2.71 ms15.20 ms
TanStack Start1.45 ms4.02 ms14.97 ms
Pracht0.84 ms2.27 ms17.36 ms
SvelteKit1.09 ms2.10 ms19.79 ms

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

Methodology: Server Side Rendered Tests (Lighthouse).

FrameworkFirst PaintFCPInteraction LatencyInput DelayProcessing DurationPresentation Delay
Astro59ms58.859ms1.044ms0.782ms0.262ms0ms
Next.js387ms386.836ms18.134ms1.84ms8.598ms7.696ms
Nuxt93ms92.791ms9.074ms0.843ms1.138ms7.093ms
Pracht86ms85.956ms18.731ms2.262ms5.223ms11.246ms
React Router111ms110.777ms20.885ms2.008ms3.236ms15.641ms
SolidStart85ms84.959ms15.066ms0.929ms3.106ms11.031ms
Solid 2.079ms78.943ms15.32ms0.768ms7.604ms6.948ms
SvelteKit70ms70.358ms15.588ms1.009ms2.685ms11.894ms
TanStack Start98ms97.579ms22.128ms1.361ms3.85ms16.917ms
Server First Paint (Lighthouse)
Server First Paint (Lighthouse) data
FrameworkMilliseconds
Astro59.00 ms
SvelteKit70.00 ms
Solid 2.079.00 ms
SolidStart85.00 ms
Pracht86.00 ms
Nuxt93.00 ms
TanStack Start98.00 ms
React Router111.00 ms
Next.js387.00 ms

The chart includes a dotted median reference line calculated from the visible framework values.

Server FCP (Lighthouse)
Server FCP (Lighthouse) data
FrameworkMilliseconds
Astro58.86 ms
SvelteKit70.36 ms
Solid 2.078.94 ms
SolidStart84.96 ms
Pracht85.96 ms
Nuxt92.79 ms
TanStack Start97.58 ms
React Router110.78 ms
Next.js386.84 ms

The chart includes a dotted median reference line calculated from the visible framework values.

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.78 ms0.26 ms0.00 ms
Nuxt0.84 ms1.14 ms7.09 ms
SolidStart0.93 ms3.11 ms11.03 ms
Solid 2.00.77 ms7.60 ms6.95 ms
SvelteKit1.01 ms2.69 ms11.89 ms
Next.js1.84 ms8.60 ms7.70 ms
Pracht2.26 ms5.22 ms11.25 ms
React Router2.01 ms3.24 ms15.64 ms
TanStack Start1.36 ms3.85 ms16.92 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.

FrameworkRequestsHTMLCSSJavaScriptOtherTotal
Astro13.28 KB0.00 KB0.00 KB0.00 KB3.28 KB
Next.js85.35 KB1.05 KB134.98 KB0.00 KB141.38 KB
Nuxt134.67 KB0.88 KB66.20 KB5.48 KB77.24 KB
Pracht61.19 KB1.18 KB19.06 KB0.00 KB21.44 KB
React Router82.45 KB1.00 KB118.19 KB0.00 KB121.64 KB
SolidStart82.65 KB0.88 KB30.26 KB0.00 KB33.79 KB
Solid 2.082.75 KB0.80 KB39.31 KB0.00 KB42.86 KB
SvelteKit123.11 KB0.86 KB34.35 KB0.00 KB38.32 KB
TanStack Start63.72 KB0.88 KB97.28 KB0.00 KB101.88 KB
Initial Load: All Resources
  • HTML
  • CSS
  • JavaScript
  • Other
Initial Load: All Resources data
FrameworkHTMLCSSJavaScriptOther
Astro3.28 KB0.00 KB0.00 KB0.00 KB
Next.js5.35 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.31 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.js5.35 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.

FrameworkOps/secMedian LatencyBody SizeDuplication
Baseline HTML8231.224ms96.83kb1x
Astro7521.45ms96.89kb1x
Next.js1367.594ms204.56kb2x
Nuxt3872.703ms201.8kb2x
Pracht5831.793ms187.02kb2x
React Router3462.907ms216.84kb2x
SolidStart3822.681ms224.22kb2x
Solid 2.04442.66ms218.32kb2x
SvelteKit4442.288ms184.29kb2x
TanStack Start3662.758ms192.78kb2x
Ops/sec
Ops/sec data
FrameworkOperations per second
Baseline HTML823
Astro752
Pracht583
Solid 2.0444
SvelteKit444
Nuxt387
SolidStart382
TanStack Start366
React Router346
Next.js136

The chart includes a dotted median reference line calculated from the visible framework values.

Body Size
Body Size data
FrameworkKilobytes
Baseline HTML96.83 KB
Astro96.89 KB
SvelteKit184.29 KB
Pracht187.02 KB
TanStack Start192.78 KB
Nuxt201.80 KB
Next.js204.56 KB
React Router216.84 KB
Solid 2.0218.32 KB
SolidStart224.22 KB

The chart includes a dotted median reference line calculated from the visible framework values.

Median Latency

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

Median Latency data
FrameworkMilliseconds
Baseline HTML1.22 ms
Astro1.45 ms
Pracht1.79 ms
SvelteKit2.29 ms
Solid 2.02.66 ms
SolidStart2.68 ms
Nuxt2.70 ms
TanStack Start2.76 ms
React Router2.91 ms
Next.js7.59 ms

The chart includes a dotted median reference line calculated from the visible framework values.

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.

FrameworkRepresentative peak req/sRepresentative peak connectionsMedian sweep P99 @ 25Median sweep P99 @ 50Median sweep P99 @ 100Total measured requests
Baseline HTML1,800.420017ms38ms92ms158,179
Astro1,590.85025ms49ms98ms140,980
Next.js54.651,219ms4,150ms4,608ms4,933
Nuxt536.212574ms321ms2,628ms52,424
Pracht693.85039ms107ms976ms65,339
React Router353.81093ms453ms3,247ms34,795
SolidStart561.211095ms337ms2,041ms54,207
Solid 2.04262577ms635ms3,043ms40,569
SvelteKit5672578ms293ms2,140ms55,228
TanStack Start412.4100105ms517ms2,473ms40,992
P99 Latency
P99 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Astro3.00 ms (v7.4.2)6.00 ms (v7.4.2)10.00 ms (v7.4.2)25.00 ms (v7.4.2)49.00 ms (v7.4.2)98.00 ms (v7.4.2)1518.00 ms (v7.4.2)
Baseline HTML2.00 ms (v24.22.1)6.00 ms (v24.22.1)9.00 ms (v24.22.1)17.00 ms (v24.22.1)38.00 ms (v24.22.1)92.00 ms (v24.22.1)366.00 ms (v24.22.1)
Next.js40.00 ms (v16.4.3)143.00 ms (v16.4.3)311.00 ms (v16.4.3)1219.00 ms (v16.4.3)4150.00 ms (v16.4.3)4608.00 ms (v16.4.3)4785.00 ms (v16.4.3)
Nuxt5.00 ms (v4.6.3)14.00 ms (v4.6.3)33.00 ms (v4.6.3)74.00 ms (v4.6.3)321.00 ms (v4.6.3)2628.00 ms (v4.6.3)2853.00 ms (v4.6.3)
Pracht3.00 ms (v0.18.0)12.00 ms (v0.18.0)17.00 ms (v0.18.0)39.00 ms (v0.18.0)107.00 ms (v0.18.0)976.00 ms (v0.18.0)2935.00 ms (v0.18.0)
React Router6.00 ms (v8.5.1)20.00 ms (v8.5.1)48.00 ms (v8.5.1)93.00 ms (v8.5.1)453.00 ms (v8.5.1)3247.00 ms (v8.5.1)3436.00 ms (v8.5.1)
Solid 2.09.00 ms (v2.0.0-rc.21)21.00 ms (v2.0.0-rc.21)33.00 ms (v2.0.0-rc.21)77.00 ms (v2.0.0-rc.21)635.00 ms (v2.0.0-rc.21)3043.00 ms (v2.0.0-rc.21)3041.00 ms (v2.0.0-rc.21)
SolidStart5.00 ms (v2.1.0)17.00 ms (v2.1.0)36.00 ms (v2.1.0)95.00 ms (v2.1.0)337.00 ms (v2.1.0)2041.00 ms (v2.1.0)2186.00 ms (v2.1.0)
SvelteKit4.00 ms (v3.1.0)14.00 ms (v3.1.0)29.00 ms (v3.1.0)78.00 ms (v3.1.0)293.00 ms (v3.1.0)2140.00 ms (v3.1.0)2002.00 ms (v3.1.0)
TanStack Start5.00 ms (v1.169.4)20.00 ms (v1.169.4)42.00 ms (v1.169.4)105.00 ms (v1.169.4)517.00 ms (v1.169.4)2473.00 ms (v1.169.4)2532.00 ms (v1.169.4)
P90 Latency
P90 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)17.00 ms (v7.4.2)32.00 ms (v7.4.2)65.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)30.00 ms (v24.22.1)66.00 ms (v24.22.1)144.00 ms (v24.22.1)
Next.js35.00 ms (v16.4.3)115.00 ms (v16.4.3)198.00 ms (v16.4.3)506.00 ms (v16.4.3)1659.00 ms (v16.4.3)2273.00 ms (v16.4.3)3061.00 ms (v16.4.3)
Nuxt3.00 ms (v4.6.3)11.00 ms (v4.6.3)20.00 ms (v4.6.3)47.00 ms (v4.6.3)96.00 ms (v4.6.3)190.00 ms (v4.6.3)187.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)75.00 ms (v0.18.0)148.00 ms (v0.18.0)201.00 ms (v0.18.0)
React Router4.00 ms (v8.5.1)16.00 ms (v8.5.1)29.00 ms (v8.5.1)71.00 ms (v8.5.1)150.00 ms (v8.5.1)283.00 ms (v8.5.1)292.00 ms (v8.5.1)
Solid 2.03.00 ms (v2.0.0-rc.21)16.00 ms (v2.0.0-rc.21)26.00 ms (v2.0.0-rc.21)65.00 ms (v2.0.0-rc.21)136.00 ms (v2.0.0-rc.21)210.00 ms (v2.0.0-rc.21)209.00 ms (v2.0.0-rc.21)
SolidStart2.00 ms (v2.1.0)11.00 ms (v2.1.0)23.00 ms (v2.1.0)64.00 ms (v2.1.0)143.00 ms (v2.1.0)174.00 ms (v2.1.0)177.00 ms (v2.1.0)
SvelteKit2.00 ms (v3.1.0)9.00 ms (v3.1.0)19.00 ms (v3.1.0)58.00 ms (v3.1.0)125.00 ms (v3.1.0)201.00 ms (v3.1.0)189.00 ms (v3.1.0)
TanStack Start3.00 ms (v1.169.4)14.00 ms (v1.169.4)28.00 ms (v1.169.4)81.00 ms (v1.169.4)165.00 ms (v1.169.4)237.00 ms (v1.169.4)232.00 ms (v1.169.4)
P75 Latency
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)63.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)112.00 ms (v24.22.1)
Next.js29.00 ms (v16.4.3)100.00 ms (v16.4.3)191.00 ms (v16.4.3)486.00 ms (v16.4.3)965.00 ms (v16.4.3)941.00 ms (v16.4.3)1467.00 ms (v16.4.3)
Nuxt2.00 ms (v4.6.3)8.00 ms (v4.6.3)20.00 ms (v4.6.3)46.00 ms (v4.6.3)91.00 ms (v4.6.3)169.00 ms (v4.6.3)163.00 ms (v4.6.3)
Pracht2.00 ms (v0.18.0)8.00 ms (v0.18.0)15.00 ms (v0.18.0)36.00 ms (v0.18.0)72.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)70.00 ms (v8.5.1)142.00 ms (v8.5.1)256.00 ms (v8.5.1)258.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)60.00 ms (v2.0.0-rc.21)130.00 ms (v2.0.0-rc.21)188.00 ms (v2.0.0-rc.21)193.00 ms (v2.0.0-rc.21)
SolidStart2.00 ms (v2.1.0)9.00 ms (v2.1.0)19.00 ms (v2.1.0)55.00 ms (v2.1.0)86.00 ms (v2.1.0)122.00 ms (v2.1.0)123.00 ms (v2.1.0)
SvelteKit2.00 ms (v3.1.0)9.00 ms (v3.1.0)18.00 ms (v3.1.0)46.00 ms (v3.1.0)99.00 ms (v3.1.0)149.00 ms (v3.1.0)147.00 ms (v3.1.0)
TanStack Start3.00 ms (v1.169.4)12.00 ms (v1.169.4)24.00 ms (v1.169.4)63.00 ms (v1.169.4)135.00 ms (v1.169.4)166.00 ms (v1.169.4)176.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.

FrameworkRepresentative peak req/sRepresentative peak connectionsMedian sweep P99 @ 25Median sweep P99 @ 50Median sweep P99 @ 100Total measured requests
Next.js48.651,331ms4,579ms4,744ms4,417
Nuxt161.225586ms3,119ms3,818ms15,652
Pracht383.85086ms312ms2,717ms35,533
React Router17510306ms1,630ms3,908ms17,584
TanStack Start246.6100206ms1,672ms2,918ms24,667
P99 Latency
P99 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js38.00 ms (v16.4.3)163.00 ms (v16.4.3)328.00 ms (v16.4.3)1331.00 ms (v16.4.3)4579.00 ms (v16.4.3)4744.00 ms (v16.4.3)4752.00 ms (v16.4.3)
Nuxt10.00 ms (v4.6.3)47.00 ms (v4.6.3)89.00 ms (v4.6.3)586.00 ms (v4.6.3)3119.00 ms (v4.6.3)3818.00 ms (v4.6.3)3843.00 ms (v4.6.3)
Pracht8.00 ms (v0.18.0)23.00 ms (v0.18.0)40.00 ms (v0.18.0)86.00 ms (v0.18.0)312.00 ms (v0.18.0)2717.00 ms (v0.18.0)3469.00 ms (v0.18.0)
React Router11.00 ms (v8.5.1)48.00 ms (v8.5.1)86.00 ms (v8.5.1)306.00 ms (v8.5.1)1630.00 ms (v8.5.1)3908.00 ms (v8.5.1)3950.00 ms (v8.5.1)
TanStack Start6.00 ms (v1.169.4)33.00 ms (v1.169.4)70.00 ms (v1.169.4)206.00 ms (v1.169.4)1672.00 ms (v1.169.4)2918.00 ms (v1.169.4)3142.00 ms (v1.169.4)
P90 Latency
P90 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js35.00 ms (v16.4.3)130.00 ms (v16.4.3)218.00 ms (v16.4.3)549.00 ms (v16.4.3)2063.00 ms (v16.4.3)2491.00 ms (v16.4.3)3252.00 ms (v16.4.3)
Nuxt8.00 ms (v4.6.3)34.00 ms (v4.6.3)64.00 ms (v4.6.3)176.00 ms (v4.6.3)333.00 ms (v4.6.3)327.00 ms (v4.6.3)346.00 ms (v4.6.3)
Pracht4.00 ms (v0.18.0)19.00 ms (v0.18.0)35.00 ms (v0.18.0)79.00 ms (v0.18.0)135.00 ms (v0.18.0)258.00 ms (v0.18.0)262.00 ms (v0.18.0)
React Router7.00 ms (v8.5.1)31.00 ms (v8.5.1)60.00 ms (v8.5.1)157.00 ms (v8.5.1)294.00 ms (v8.5.1)398.00 ms (v8.5.1)396.00 ms (v8.5.1)
TanStack Start5.00 ms (v1.169.4)23.00 ms (v1.169.4)49.00 ms (v1.169.4)132.00 ms (v1.169.4)287.00 ms (v1.169.4)330.00 ms (v1.169.4)305.00 ms (v1.169.4)
P75 Latency
P75 Latency by connections
Framework1 connection5 connections10 connections25 connections50 connections100 connections200 connections
Next.js32.00 ms (v16.4.3)111.00 ms (v16.4.3)202.00 ms (v16.4.3)532.00 ms (v16.4.3)1050.00 ms (v16.4.3)1048.00 ms (v16.4.3)1732.00 ms (v16.4.3)
Nuxt7.00 ms (v4.6.3)32.00 ms (v4.6.3)63.00 ms (v4.6.3)158.00 ms (v4.6.3)314.00 ms (v4.6.3)302.00 ms (v4.6.3)301.00 ms (v4.6.3)
Pracht4.00 ms (v0.18.0)18.00 ms (v0.18.0)32.00 ms (v0.18.0)71.00 ms (v0.18.0)126.00 ms (v0.18.0)246.00 ms (v0.18.0)246.00 ms (v0.18.0)
React Router6.00 ms (v8.5.1)29.00 ms (v8.5.1)56.00 ms (v8.5.1)143.00 ms (v8.5.1)284.00 ms (v8.5.1)360.00 ms (v8.5.1)365.00 ms (v8.5.1)
TanStack Start5.00 ms (v1.169.4)20.00 ms (v1.169.4)41.00 ms (v1.169.4)110.00 ms (v1.169.4)214.00 ms (v1.169.4)237.00 ms (v1.169.4)231.00 ms (v1.169.4)