Nie sami prowadziliśmy tę analizę: są to dane osób trzecich, publiczne, pochodzące i datowane. W tym artykule szczegółowo opisano, co mówią, stojącą za tym metodologię i co faktycznie zmienia w przypadku wyboru backendu — a nie porównanie Aurabase z konkurencją.
Rdzeń Aurabase działa w Rust, na axum i tokio — zweryfikowany w Cargo.toml monorepo, dziesięć usług współdzielących tę samą zależność. Jednak do tej pory nie opublikowaliśmy żadnych własnych danych dotyczących wydajności. Jeśli szukasz precyzyjnego opóźnienia Aurabase, ono jeszcze nie istnieje: metodologia będzie przed liczbą, a nie odwrotnie.
Najważniejsze
- W Sharkbench (na ławce społeczności, Ryzen 7 7800X3D, Docker/Linux, 24.08.2025): Actix, Hyper, Axum i Rocket pracują z szybkością od 18 047 do 21 965 wymagań/s przy 1,4–1,7 ms. Fastify, Koa i Express ograniczają od 5766 do 9340 wymagań/s po stronie Node.js, przy 3,4–5,5 ms.
- Środowisko wykonawcze waży tyle samo, co język: ten sam kod Express wzrasta z 5766 żądań/s w Node.js do 18 917 żądań/s w Bun — współczynnik × 3,3 bez zmiany wiersza.
- Luka w pamięci jest najbardziej wyraźna: 8,5 MB dla Axum w porównaniu z 82,5 MB dla Express/Node.js – co jest zgodne z brakiem modułu zbierającego elementy bezużyteczne w Rust.
- Aurabase nie opublikował dotychczas żadnych własnych testów porównawczych. Rdzeń Rust/axum/tokio jest sprawdzany w kodzie — a nie wydajność.
- Pojedyncza liczba niczego nie dowodzi: sprzęt, wersja frameworka, rozmiar ładunku i poziom konkurencji różnią się w rankingu bardziej niż sam język.
Co pokazuje niedawna analiza zewnętrzna strony trzeciej
Sharkbench to niezależny projekt społecznościowy, który mierzy trzy rzeczy: zdolność frameworka do obsługi współbieżnych żądań HTTP, operacje we/wy i serializację JSON. Test odbywa się w systemie Docker/Linux na procesorze Ryzen 7 7800X3D, a ostatnia publiczna aktualizacja miała miejsce 24 sierpnia 2025 r. (sharkbench.dev/web, dostęp: 24 sierpnia 2026 r.).
Źródło: Sharkbench, 24 sierpnia 2025 — Docker/Linux, Ryzen 7 7800X3D.
Axum — framework, którego używa Aurabase w swoim rdzeniu Rust, zweryfikowany w Cargo.toml — przetwarza na tym stanowisku 21 030 żądań na sekundę. Express, framework Node.js najczęściej używany w środowisku produkcyjnym, przetwarza 5766 na tym samym sprzęcie: współczynnik 3,6. To nie jest odosobniony przypadek. Wszystkie cztery przetestowane frameworki Rust mieszczą się w wąskim zakresie od 18 000 do 22 000 wymagań/s, podczas gdy trzy testowane frameworki Node.js osiągają limit od 5766 do 9340.
W praktyce „req/s” mierzy przepustowość przy ciągłym, współbieżnym obciążeniu, a nie prędkość izolowanego żądania w witrynie o małym natężeniu ruchu. W przypadku punktu końcowego wywoływanego raz na kilka sekund różnica nigdy nie jest widoczna. Ma to decydujące znaczenie w przypadku gorącego punktu końcowego — przepływu w czasie rzeczywistym, publicznego interfejsu API o dużym natężeniu ruchu, zadania obejmującego tysiące wywołań — gdzie liczba żądań przetworzonych na rdzeń procesora przy jednakowym sprzęcie bezpośrednio określa rachunek za infrastrukturę.
Opóźnienie ma ten sam wzór
Średnie opóźnienie ma tę samą hierarchię na tym stanowisku: od 1,4 do 1,7 ms dla testowanych frameworków Rust w porównaniu do 3,4 do 5,5 ms dla testowanych frameworków Node.js.
Źródło: Sharkbench, 24 sierpnia 2025 r. — średnie opóźnienie, a nie p99.
Liczba ta jest średnią, a nie p99. Wstrzymania związane ze śmieciami w zarządzanym środowisku wykonawczym wpływają głównie na kolejkę wysyłkową — na najwolniejsze żądania, a nie na medianę. Jest to temat dedykowanego artykułu z tej serii: dlaczego brak modułu zbierającego elementy bezużyteczne zmienia opóźnienie p99.
Dlaczego Rust nie ma przerwy w GC do zapłaty
Rust zarządza pamięcią według własności, sprawdzaną w czasie kompilacji — żaden moduł zbierający elementy bezużyteczne nie działa w tle i nie zakłóca wykonywania. Oficjalna Księga Rust podsumowuje to w następujący sposób: „Żadna z cech własności nie spowolni twojego programu podczas jego działania” (The Rust Programming Language, doc.rust-lang.org, dostęp 24 sierpnia 2026). Pamięć jest zwalniana, gdy tylko zmienna będąca jej właścicielem wykracza poza zakres — jest to znany czas kompilacji, a nie nieprzewidywalna przerwa w czasie wykonywania.
Z kolei Node.js działa na pojedynczym wątku JavaScript i deleguje operacje we/wy do jądra poprzez wielofazową pętlę zdarzeń (timery, odroczone wywołania zwrotne, odpytywanie, sprawdzanie...) — ale wszelkie synchroniczne obliczenia w tym wątku, w tym przepustka do zbierania elementów bezużytecznych z silnika V8, blokują wykonywanie podczas jego działania (oficjalna dokumentacja Node.js, nodejs.org, dostęp 24 sierpnia 2026). Jest to różnica w modelu pamięci, a nie szczegół implementacji.
Prawdziwa niespodzianka: środowisko wykonawcze waży tyle samo, co język
Najbardziej sprzeczny z intuicją wynik z tej samej analizy nie dotyczy Rusta: dotyczy samego Node.js. Express — jeden i ten sam kod, jedno i to samo API — wzrasta z 5766 żądań/s w Node.js do 18 917 żądań/s w Bun, współczynnik ×3,3, bez zmiany wiersza kodu aplikacji (Sharkbench, 24 sierpnia 2025 r.).
Źródło: Sharkbench, 24 sierpnia 2025 r. — ten sam kod Express, trzy środowiska wykonawcze JavaScript.
W Deno ten sam kod Express ogranicza się do 6088 żądań/s — blisko Node.js, daleko od Bun. Język JavaScript jest identyczny we wszystkich trzech przypadkach; To środowisko wykonawcze — silnik JS, implementacja pętli zdarzeń, zbieranie elementów bezużytecznych — zmienia grę. Porównywanie „Rust” do „Node.js” bez określenia środowiska wykonawczego, wersji i frameworku jest jak porównywanie konfiguracji, a nie języków.
Na tej samej próbie platforma Go Gin osiąga szczyt przy 3546 wymaganiach/s, gdy FastHTTP — wciąż w trybie Go — wzrasta do 5567 żądań/s przy opóźnieniu wynoszącym zaledwie 0,7 ms (Sharkbench, 24 sierpnia 2025 r.). Dwa bardzo różne wyniki dla jednego języka: izolowana liczba nigdy nie podsumowuje całego ekosystemu.
Dlaczego pojedynczy numer testu porównawczego nigdy nie wystarczy
Testy porównawcze TechEmpower Framework ilustrują ten sam pomysł na większą skalę. Repozytorium open source zostało zaktualizowane 24 marca 2026 r., a jego ostatnia runda (runda 23) była tematem postu z dnia 16 marca 2026 r. (TechEmpower, dostęp: 24 sierpnia 2026 r.). W tym projekcie przeprowadza się wiele rodzajów testów w setkach implementacji, właśnie dlatego, że pojedynczy test nigdy nie reprezentuje frameworka, nie mówiąc już o języku.
Convex, gracz na rynku baz danych, sformułował w tej sprawie najjaśniejsze stanowisko: odmawiając udziału w marketingowej „wojnie na wykresy słupkowe” pomiędzy konkurującymi bazami danych, uznanej za wprowadzającą w błąd. „To teatr skalowania, a nie skalowanie”, pisze zespół (Convex, dostęp 24 sierpnia 2026 r.). Podzielamy tę lekturę: gołe liczby, bez opublikowanej metodologii, niczego nie dowodzą – ani dla konkurencji, ani dla nas.
Konkretne zmiany: sprzęt (procesor, pamięć RAM), dokładna wersja frameworku i środowisko wykonawcze, rozmiar ładunku JSON, poziom konkurencji i czas trwania testu – wszystko to wpływa na ranking – czasem bardziej niż sam wybór języka. Ławka, która nie publikuje tych parametrów, nie reprodukuje się, dlatego nie weryfikuje się sama — zobacz naszą kompletną i powtarzalną metodologię benchmarkingu backendu.
A Aurabase w tym wszystkim?
Podstawowy backend Aurabase jest napisany w języku Rust, na axum i tokio — sprawdzany w Cargo.toml monorepo: dziesięć usług (aura-gateway, aura-auth, aura-db…) ma tę samą zależność obszaru roboczego axum (0.8) i to samo środowisko wykonawcze tokiow 2021 r. wydanie. Brama, która kieruje ruchem płaszczyzny danych i płaszczyzny zarządzania, oprócz axum opiera się na hyper — szczegółowe informacje można znaleźć w naszym artykule na temat architektury płaszczyzny danych/płaszczyzny zarządzania bramy. Strukturę obszaru roboczego Cargo obsługującą te dziesięć usług opisano w naszym artykule na temat obszaru roboczego Cargo.
Nie mamy jeszcze opublikowanych danych dotyczących przepustowości i opóźnień Aurabase wraz z udokumentowaną metodologią i sprzętem. Jest to celowe: wolimy publikować metodologię przed wykresem, a nie odwrotnie – jest to temat przyszłego artykułu z tej serii.
Aby uzyskać pełne porównanie architektury — zunifikowany rdzeń Rust w Aurabase w porównaniu z heterogenicznym stosem Elixir/Go/TypeScript/Node udokumentowany u bezpośredniego konkurenta — zobacz nasze szczegółowe porównanie Aurabase vs Supabase. Jeśli już migrujesz projekt, przewodnik migracji Supabase do Aurabase omawia schemat, zasady RLS i SDK.
Dodatek: pełna tabela danych
Wszystkie wiersze cytowane w tym artykule, opublikowane przez Sharkbench 24 sierpnia 2025 r. (Docker/Linux, Ryzen 7 7800X3D).
| Struktura | Czas wykonania | Upraszanie | Utajenie | Pamięć |
|---|---|---|---|---|
| Actix | Rdza | 21 965 | 1,4 ms | 16,6 MB |
| Hiper | Rdza | 21 781 | 1,5 ms | 8,6 MB |
| Aksum | Rdza | 21 030 | 1,6 ms | 8,5MB |
| Rakieta | Rdza | 18 047 | 1,7 ms | 6,4 MB |
| Umocnij | Node.js | 9 340 | 3,4 ms | 57,0MB |
| Koa | Node.js | 8 828 | 3,6 ms | 53,3MB |
| Wyrazić | Node.js | 5 766 | 5,5 ms | 82,5 MB |
| Wyrazić | Kok | 18 917 | 1,3 ms | 53,3 MB |
| Wyrazić | Deno | 6 088 | 5,0 ms | 130,7 MB |
| Gin | Iść | 3 546 | 1,0 ms | 16,7 MB |
| Szybki HTTP | Iść | 5 567 | 0,7 ms | 13,4 MB |
Przytocz te dane: Sharkbench, „Web Framework Benchmarks”, sharkbench.dev/web, ostatnia aktualizacja 24 sierpnia 2025 r.
Często zadawane pytania
O czym pamiętać
Na przytoczonym tutaj stanowisku wszystkie frameworki Rusta działają w wąskim zakresie — 18 000 do 22 000 req/s, 1,4–1,7 ms — znacznie wyprzedzając frameworki Node.js na samym Node.js (5766–9340 req/s, 3,4–5,5 ms). Ale środowisko wykonawcze zmienia sytuację w takim samym stopniu, jak język: Express na Bun prawie dogania Axum na Rust.
Jeśli oceniasz backend wyłącznie na podstawie surowej wydajności, przed podaniem liczby wymagaj metodologii: sprzętu, wersji, rozmiaru ładunku, poziomu konkurencji. Aurabase nie opublikował jeszcze własnych danych liczbowych; kiedy to nastąpi, na pierwszym miejscu będzie metodologia.