Blazor Server vs WebAssembly performance comparisons are everywhere, but most of them are based on folklore rather than measurement. The common claim is simple: WebAssembly loads slowly and then runs fast, while Blazor Server loads instantly and pays a round trip on every interaction. In 2026, with .NET 10 on both sides, the honest answer is more interesting, and choosing a hosting model without real numbers is a gamble.
This article gives you benchmarks you can trust. We define the metrics that matter, explain where each hosting model is genuinely faster, and show you how to measure both models on your own hardware. No vendor slides and no cherry-picked demos, just the numbers and the reasoning behind them.
What to Measure in Blazor Server vs WebAssembly
Any honest comparison starts with the metrics. For the first visit, the important numbers are TTFB (time to first byte), first paint, and time to interactive. For the steady state, what matters is the latency of a single UI interaction and the throughput the server can sustain. A benchmark that only reports TTFB tells you almost nothing, because the two models spend their time in completely different places.
In Blazor Server, the server renders the initial HTML, so first paint can arrive in well under a second even on a slow connection. The cost moves to the SignalR circuit: a persistent WebSocket that carries every event and every render diff. In Blazor WebAssembly, first paint waits for the .NET runtime and your application assemblies to download and boot, which can take several seconds on a cold cache. After that, rendering happens locally and never touches the network.
- Use the Chrome DevTools Performance panel and the Network tab for both models
- Record TTFB, DOMContentLoaded, load, and first interactive timings separately
- Test with a cold cache and a warm cache, and report both states
- Measure p50 and p95 interaction latency, not just the average
Blazor Server vs WebAssembly: First Render and Time to Interactive
The biggest gap between the two models is on first load. A Blazor Server app ships a small HTML document plus blazor.server.js, which is around 30 KB gzipped. The first render is generated on the server and streamed to the browser, so a user on a corporate network sees content almost immediately. Interactivity is ready a moment later, once the circuit connects.
Blazor WebAssembly ships the .NET runtime, which is around 2 MB compressed, plus your application DLLs. A typical line-of-business app lands between 3 and 8 MB on the wire. On a 10 Mbps connection that is a multi-second download before anything renders, and boot time adds more. .NET 10 has improved WASM startup with faster runtime initialization, but the physics still applies: megabytes over the network lose to a handful of HTML bytes every time.
performance.mark('app-start');
Blazor.start().then(() => {
performance.mark('boot-finished');
});
window.addEventListener('blazor:connect', () => {
performance.mark('circuit-connected');
});
Add the marks above to your Blazor Server layout before Blazor.start() runs, then read the deltas in the Performance panel: app-start to boot-finished is the framework startup, and app-start to circuit-connected is your time to interactive. Run the identical measurement on a WebAssembly build by marking before and after the dotnet boot. Numbers from the same network, the same browser, and the same cache state are the only numbers worth comparing.
Blazor Server vs WebAssembly Under Real Interaction Load
Steady state is where the two models trade places. Every Blazor Server interaction is a round trip over SignalR: your click is serialized, sent to the server, the component tree re-renders, and the diff comes back. On a datacenter-grade connection with a 20 ms round trip, that is imperceptible. Across a 250 ms satellite or VPN link, a chatty interaction such as typing in a grid filter becomes visibly delayed, because each keystroke can trigger its own round trip.
Blazor WebAssembly pays no such cost: component state lives in the browser, so filtering a client-side table is instant. The cost appears when data moves. Every query and every save crosses the network as an HTTP call to an API, with JSON serialization on both ends. An app that repeatedly refetches the same data over REST can end up slower than the equivalent Blazor Server app where the data was already on the server and the diff was a few bytes.
The practical result is a scorecard that depends on where the work happens. Server-side data access, paginated grids, and business rules inside EF Core queries all favor Blazor Server, because the data never leaves the machine that owns it. Large public pages served to anonymous users at internet scale favor WebAssembly, because you stop paying for a circuit per visitor.
Where Each Model Wins: A Blazor Server vs WebAssembly Scorecard
- Blazor Server wins on first load, data-heavy interactions, and slow corporate networks
- WebAssembly wins on offline use, public marketing pages, and very high anonymous traffic
- A Blazor Web App lets you assign a render mode per component, so one app can use both
- The single biggest mistake is benchmarking first-visit WASM against a warm-cache Blazor Server app
If your application lives behind a login, manipulates large datasets, and runs business logic in C# against a database, Blazor Server delivers a faster experience at every step of the user journey. If your application is a public catalog where most visitors never log in, WebAssembly is a legitimate choice.
Why Indotalent Ships Blazor Server
That is why every Indotalent product โ CRM, HRM, CMS, OMS, SCM, WMS, SWM, and the SaaS multi-tenant editions โ is built with Blazor Server. Enterprise data access stays next to the database, no multi-megabyte payload ever ships to the browser, and the SignalR circuit keeps the whole session consistent. The benchmarks favor Blazor Server exactly where enterprise apps spend their time, which is why MudBlazor data grids and server-side queries feel instant on a well-sized VM.
FAQ
Is Blazor Server always faster than Blazor WebAssembly?
No. Blazor Server is faster at first load and for data-heavy, server-resident workloads. WebAssembly is faster for local interactions on low-latency client hardware. The right answer depends on where your data and business rules live.
How much memory does each active Blazor Server circuit use?
A typical circuit consumes between 10 and 40 MB depending on the component tree, the DI scope, and the DbContext. That number drives server sizing: a 4 GB VM comfortably hosts hundreds of concurrent circuits for a typical line-of-business app.
Does .NET 10 make WebAssembly startup fast enough?
It is meaningfully better, with faster runtime initialization and smaller assemblies after trimming. But a cold-cache WASM app still downloads megabytes before first paint, which matters on slow corporate and mobile networks.
Can I use both hosting models in one application?
Yes. The Blazor Web App model lets you attach render modes per component or per page, mixing InteractiveServer and InteractiveWebAssembly in a single app.
Key Takeaways
- Measure TTFB, time to interactive, and interaction latency separately, because they tell different stories
- Blazor Server wins first render; WebAssembly wins local interaction, and neither claim is absolute
- .NET 10 improves both models, but download size and network RTT still dominate the numbers
- Indotalent products use Blazor Server because enterprise workloads favor server-side data access