Blazor - co to właściwie jest?
Blazor to framework od Microsoftu pozwalający pisać interaktywne aplikacje webowe w C# zamiast JavaScript. Ale to tylko początek - Blazor ewoluował z eksperymentu w pełnoprawny ekosystem obejmujący web, desktop i mobile.
Tryby renderowania - przegląd
┌─────────────────────────────────────────────────────────────┐
│ BLAZOR │
├─────────────┬─────────────┬─────────────┬──────────────────┤
│ Server │ WASM │ Auto │ Hybrid (MAUI) │
├─────────────┼─────────────┼─────────────┼──────────────────┤
│ Logika na │ Logika w │ Server → │ Natywna appka │
│ serwerze │ przeglądarce│ WASM │ desktop/mobile │
│ SignalR │ No server │ Best of │ WebView lub │
│ connection │ needed │ both │ native rendering │
└─────────────┴─────────────┴─────────────┴──────────────────┘
1. Blazor Server
Jak działa: Cały kod C# wykonuje się na serwerze. Przeglądarka to tylko "terminal" - wysyła eventy (kliknięcia, input) przez SignalR, serwer przetwarza i odsyła diff DOM-u.
// Komponent - wykonuje się NA SERWERZE
@code {
private async Task LoadData()
{
// Bezpośredni dostęp do bazy - bez API!
users = await _dbContext.Users.ToListAsync();
}
}
Zalety Server
| ✅ Zaleta | Wyjaśnienie |
|---|---|
| Szybki start | Zero downloadu - strona działa od razu |
| Pełny .NET | Wszystkie biblioteki, bez ograniczeń WASM |
| Bezpieczeństwo | Kod nigdy nie trafia do przeglądarki |
| SEO-friendly | Prerendering out of the box |
| Debugging | Standardowy debugger VS/Rider |
Wady Server
| ❌ Wada | Wyjaśnienie |
|---|---|
| Wymaga połączenia | Offline = nie działa |
| Latency | Każda interakcja = roundtrip do serwera |
| Skalowalność | Każdy user = SignalR connection |
| Koszty serwera | Więcej CPU/RAM na serwerze |
Kiedy Server?
- Aplikacje wewnętrzne (CRM, ERP, admin panele)
- Real-time dashboardy
- Prototypy i MVP
- Aplikacje z wrażliwą logiką (finanse, medycyna)
2. Blazor WebAssembly (WASM)
Jak działa: Cały runtime .NET kompiluje się do WebAssembly i wykonuje w przeglądarce. Serwer wysyła tylko statyczne pliki.
// Ten sam komponent - ale wykonuje się W PRZEGLĄDARCE
@code {
private async Task LoadData()
{
// Musi iść przez HTTP API
users = await Http.GetFromJsonAsync<List<User>>("/api/users");
}
}
Zalety WASM
| ✅ Zaleta | Wyjaśnienie |
|---|---|
| Offline support | Działa bez internetu (z cache) |
| Zero server load | Logika na kliencie |
| Niski latency | Wszystko lokalne |
| Hosting tani | Static files = CDN |
| PWA ready | Service Workers, instalacja |
Wady WASM
| ❌ Wada | Wyjaśnienie |
|---|---|
| Wolny start | Download runtime (~2-5MB) |
| Ograniczenia .NET | Nie wszystko działa w WASM |
| Kod widoczny | Można zdekompilować DLL |
| API required | Baza danych tylko przez HTTP |
| Debugging trudniejszy | Browser DevTools |
Kiedy WASM?
- Aplikacje offline-first
- PWA (Progressive Web Apps)
- Publiczne aplikacje z dużym ruchem
- Gry przeglądarkowe
- Narzędzia działające lokalnie
3. Blazor Auto (Interactive Auto) - .NET 8+
Jak działa: Najlepsze z obu światów. Pierwsze załadowanie = Server (szybki start), w tle pobiera się WASM. Kolejne wizyty = pełne WASM.
// Program.cs - .NET 8+
builder.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddInteractiveWebAssemblyComponents();
// Komponent
@rendermode InteractiveAuto // Magiczna linia
Flow użytkownika
Pierwsza wizyta:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Request │───▶│ Server │───▶│ HTML │ ← Instant!
└──────────┘ │ Render │ └──────────┘
└────┬─────┘
│ Background download WASM
▼
┌──────────────┐
│ Cache WASM │
└──────────────┘
Kolejne wizyty:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Request │───▶│ WASM │───▶│ Render │ ← No server!
└──────────┘ │ (cached)│ └──────────┘
Zalety Auto
| ✅ Zaleta | Wyjaśnienie |
|---|---|
| Szybki pierwszy load | Server rendering |
| Później offline | WASM w cache |
| Elastyczność | Per-komponent decyzja |
| SEO + Performance | Best of both |
Wady Auto
| ❌ Wada | Wyjaśnienie |
|---|---|
| Complexity | Dwa runtime'y do zarządzania |
| State sync | Transfer stanu Server→WASM |
| Większy projekt | Więcej konfiguracji |
| Debugging | Trzeba wiedzieć gdzie kod działa |
Kiedy Auto?
- Publiczne aplikacje wymagające SEO + interaktywności
- E-commerce (szybki start, potem SPA-like)
- Portale contentowe z interaktywnymi elementami
4. Blazor Hybrid (MAUI)
Jak działa: Komponenty Blazor renderowane w natywnej aplikacji desktop/mobile przez WebView lub native controls.
<!-- MainPage.xaml -->
<BlazorWebView HostPage="wwwroot/index.html">
<BlazorWebView.RootComponents>
<RootComponent Selector="#app" ComponentType="{x:Type local:Main}" />
</BlazorWebView.RootComponents>
</BlazorWebView>
// Ten sam komponent Blazor - działa w MAUI!
@code {
[Inject] private IFileSystem FileSystem { get; set; }
private async Task SaveLocally()
{
// Dostęp do natywnego file system!
await FileSystem.WriteTextAsync(path, content);
}
}
Platformy Hybrid
| Platforma | Status | Rendering |
|---|---|---|
| Windows | ✅ Production | WebView2 (Edge) |
| macOS | ✅ Production | WKWebView |
| iOS | ✅ Production | WKWebView |
| Android | ✅ Production | WebView |
| Linux | 🔶 Community | WebKitGTK |
Współdzielenie kodu
┌─────────────────────────────────────────┐
│ Shared Project │
│ ┌─────────────────────────────────┐ │
│ │ Components/ │ │
│ │ ├── UserProfile.razor │ │ ← Ten sam kod!
│ │ ├── Dashboard.razor │ │
│ │ └── Settings.razor │ │
│ │ Services/ │ │
│ │ └── ApiService.cs │ │
│ └─────────────────────────────────┘ │
└────────────────┬────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│ Web │ │ Mobile │ │Desktop │
│(Server)│ │ (MAUI) │ │ (MAUI) │
└────────┘ └────────┘ └────────┘
Realistycznie: 70-90% kodu można współdzielić między web a mobile/desktop.
Zalety Hybrid
| ✅ Zaleta | Wyjaśnienie |
|---|---|
| Jeden codebase | Web + Mobile + Desktop |
| Native APIs | Kamera, GPS, filesystem |
| Offline default | Wszystko lokalne |
| App Store | iOS/Android/Windows Store |
| Existing skills | C# devs → mobile devs |
Wady Hybrid
| ❌ Wada | Wyjaśnienie |
|---|---|
| WebView overhead | Nie jest 100% native |
| Platform quirks | iOS vs Android różnice |
| App size | Większe niż pure native |
| Learning MAUI | Nowy framework do nauki |
Kiedy Hybrid?
- Aplikacje wewnętrzne na wszystkie platformy
- Migracja z Xamarin
- Startups - jeden zespół, wszystkie platformy
- Companion apps do istniejącej web app
Porównanie wydajności
| Metryka | Server | WASM | Auto | Hybrid |
|---|---|---|---|---|
| Time to Interactive | ~100ms | 2-5s | ~100ms* | ~200ms |
| Subsequent loads | ~100ms | ~200ms | ~200ms | ~200ms |
| Memory (client) | Low | High | Medium | Medium |
| CPU (client) | Low | High | Medium | Medium |
| Offline | ❌ | ✅ | ✅* | ✅ |
| SEO | ✅ | 🔶 | ✅ | N/A |
*Auto: po pierwszym załadowaniu WASM
Kiedy Blazor NIE jest dobrym wyborem?
1. Aplikacje wymagające minimalnego bundle size
React (minified): ~40KB
Vue (minified): ~30KB
Blazor WASM: ~2-5MB (z runtime)
Dla landing pages, prostych stron - overkill.
2. Zespół bez doświadczenia .NET
Krzywa uczenia C# + Blazor + .NET ecosystem jest realna. Jeśli zespół zna React - zostańcie przy React.
3. Real-time games wymagające 60fps
WebGL/Canvas + JavaScript będzie wydajniejszy. Blazor dodaje overhead.
4. Aplikacje wymagające maksymalnej kompatybilności
Stare przeglądarki nie obsługują WASM. Server wymaga stałego połączenia.
5. Mikro-frontendy
Blazor nie ma dobrego story dla micro-frontends (jeszcze).
Podsumowanie - macierz decyzyjna
| Potrzebujesz | Wybierz |
|---|---|
| Szybki start + prosta apka | Blazor Server |
| Offline + PWA | Blazor WASM |
| SEO + interaktywność | Blazor Auto |
| Mobile + Desktop | Blazor Hybrid |
| Max performance | Server (dla apek) / WASM (dla narzędzi) |
| Jeden zespół C# | Cokolwiek z powyższych! |
Moja rekomendacja
Dla większości aplikacji biznesowych w 2024:
- Start z Blazor Server - szybki development, łatwy debugging
- Dodaj Auto gdy potrzebujesz offline/PWA
- Rozważ Hybrid gdy klienci chcą mobile app
Blazor to nie silver bullet, ale dla zespołów .NET to najefektywniejsza droga do full-stack web development bez uczenia się nowego ekosystemu.
Ten artykuł bazuje na doświadczeniu z produkcyjnymi aplikacjami Blazor Server. Sprawdź case study DevFolio po praktyczne przykłady.
Potrzebujesz pomocy z AI?
Porozmawiajmy o tym, jak mogę pomóc Twojej firmie wdrożyć AI.
Skontaktuj się
💬 Komentarze (0)
Zostaw komentarz
Bądź pierwszy, który skomentuje!