# Dart na serveru: proč selhal pod zátěží v produkci
Vývojář SaaS služby se rozhodl nahradit Node.js za Dart, aby snížil spotřebu paměti. Očekával 10 MB místo 80 MB na startu, AOT kompilaci a statické typování. Místo toho dvě týdny vývoje, vlastní framework a benchmarky ukazující horší výsledky. Lekce: vždy proveďte syrové benchmarky na produkčních scénářích před migrací.
Služba autorizace (OAuth2, Redis ORM) sloužila jako testovací. Node.js spotřebovával 500 MB na vrcholu, ale paměť uvolňoval. Stovky instancí po 80 MB na startu – hlavní problém.
Ekosystém: chybí nástroje pro backend
Dart je zaměřený na Flutter. Neexistují analogy NestJS, Redis klienty na úrovni ioredis jsou vzácné. Shelf je primitivní router, Serverpod je pro full-stack Flutter.
Musel postavit framework od nuly:
- Stromový DI jako v Angularu.
- Request scope přes Zone.
- CLI s kódovou generací pro AOT.
Přenesli ts-oauth2-server a ioredis (4500 řádků Dart vs 23500 TS). AI to zvládl, ale cena je vysoká: experimentální příznak --enable-experiment=enhanced-parts, part 'file.g.dart' všude, commit plachty nebo generace na CI.
Refleze byly odstraněny pro AOT. Type je nepoužitelný útržek, statické metody nelze volat. DI bez mirrors vyžaduje CLI v JIT → mirrors → generace. V TS/Java/C# stačí tři řádky reflexe.
Jazyk: příjemný, ale ne pro metaprogramování
Syntaxe je logická, chyby na kompilaci. Ale for...in přes objekty chybí, reflexe absentuje. Kódová generace je noční můra: odkazy na .g.dart v zdrojácích.
AI přenesl ioredis mechanicky. Výsledek: +5% RPS nad nejlepším klientem na pub.dev. Nekrolog ekosystému – backend kód v Dartu se nepíše.
Benchmarky: latence a paměť ničí
Scénář: 3 endpointy, Postgres, Redis. Syrový HTTP, bez frameworků. 100m CPU, 500 VUS.
| Metrika | Dart AOT | Node.js | Go |
|---------|----------|---------|----|
| RSS start | 3 MB | 18 MB | - |
| p95 latence | 9,5 s | 5 s | 2,9 s |
| RPS | horší Node 2x | - | nejlepší |
| Vrchol RSS | 39-47 MB | 37 MB | - |
Dart:
- Neuvolňuje paměť do OS (>5% po vrcholu).
- GC pod tlakem: pauzy pro 60fps (Flutter), ne RSS pro K8s.
- Při throttlingu roste na 47 MB, Node se stlačuje.
Příznaky GC (--dontneed_on_sweep, --use_compactor) nepomohly. Podle designu: VM pro mobily. K8s vidí 40 MB/pod trvale, HPA neupravuje uzly. Úspora na startu se ztrácí v přeplatě.
Na Cloud Run: Dart dražší než Node – pomalejší + drží paměť.
Co je důležité:
- Latence p95 9,5 s vs 5 s Node – selhání v produkci.
- Paměť se nevrací: přeplata za škálování.
- Ekosystém mrtvý mimo Flutter.
- Benchmarky v repozitáři: k8s manifesty, CPU profily, Dockerfiles.
Závěr: niche Dartu je jen Flutter
Dvě týdny šly na framework, porty, testy. Dart je dobrý pro jednoduchý kód, ale server-side je fiasko. Chybí reflexe, VM není pro cloud, kódová generace peklo. Oficiální sliby „škálovatelné API pro Cloud Run“ se nepotvrdily.
Alternativy jako Go odmítnuty kvůli err != nil a context.Context. Node.js zůstává: paměť uvolňuje, latence lepší.
— Editorial Team
Zatím žádné komentáře.