PRODSoeverein Europees BaaS-platformOpen Dashboard →

Prestaties · 12 min gelezen

Rust versus Node.js: backend-benchmark en latentie

Affane Daylami · Fondateur · 5 juli 2026

Terug naar blog

Op een onafhankelijke communitybank die in augustus 2025 is bijgewerkt, voeren Rust-frameworks allemaal tussen de 18.000 en 22.000 verzoeken per seconde uit met een latentie van 1,4 tot 1,7 ms. Equivalente Node.js-frameworks bereiken tussen 5.766 en 9.340 req/s, bij 3,4-5,5 ms, op dezelfde hardware (Sharkbench, 24 augustus 2025).

Deze Engelse tekst is automatisch gegenereerd op basis van het Franse origineel en is nog niet beoordeeld.
Deze pagina is automatisch vertaald. De Engelse versie is gezaghebbend.

We hebben deze bank niet zelf gerund: dit zijn cijfers van derden, openbaar, afkomstig en gedateerd. Dit artikel beschrijft wat ze zeggen, de methodologie erachter en wat het feitelijk verandert voor een backend-keuze – geen vergelijking van Aurabase met een concurrent.

De kern van Aurabase draait in Rust, op axum en tokio – geverifieerd in de Cargo.toml van de monorepo, tien services die dezelfde afhankelijkheid delen. Maar we hebben tot nu toe geen eigen prestatiecijfers gepubliceerd. Als je op zoek bent naar een precieze Aurabase-latentie, die bestaat nog niet: de methodologie komt vóór het getal, en niet andersom.

De essentie

  • Op Sharkbench (communitybench, Ryzen 7 7800X3D, Docker/Linux, 24/08/2025): Actix, Hyper, Axum en Rocket draaien allemaal tussen 18.047 en 21.965 req/s bij 1,4-1,7 ms. Fastify-, Koa- en Express-limiet tussen 5.766 en 9.340 req/s aan de Node.js-kant, bij 3,4-5,5 ms.
  • De runtime weegt evenveel als de taal: dezelfde Express-code gaat van 5.766 req/s op Node.js naar 18.917 req/s op Bun – een factor ×3,3 zonder een regel te veranderen.
  • De geheugenkloof is het duidelijkst: 8,5 MB voor Axum versus 82,5 MB voor Express/Node.js – consistent met de afwezigheid van de garbage collector van Rust.
  • Aurabase heeft tot nu toe geen eigen benchmarks gepubliceerd. De Rust/axum/tokio-kern wordt gecontroleerd op code, niet op prestaties.
  • Een op zichzelf staand cijfer bewijst niets: hardware, raamwerkversie, payloadgrootte en concurrentieniveau variëren de ranglijst meer dan de taal alleen.
#
De bank

Wat een recente bank van derden laat zien

Sharkbench is een onafhankelijk gemeenschapsproject dat drie dingen meet: het vermogen van een raamwerk om gelijktijdige HTTP-verzoeken af te handelen, I/O-bewerkingen en JSON-serialisatie. De test draait onder Docker/Linux op een Ryzen 7 7800X3D, met een laatste openbare update op 24 augustus 2025 (sharkbench.dev/web, geraadpleegd op 24 augustus 2026).

Doorvoer in verzoeken per seconde, Rust versus Node.jsActix (roest) 21.965 vereiste/s, Hyper (roest) 21.781 vereiste/s, Axum (roest) 21.030 vereiste/s, Rocket (roest) 18.047 vereiste/s, Fastify (Node.js) 9.340 vereiste/s, Koa (Node.js) 8.828 vereiste/s, Express (Node.js) 5.766 verzoeken/s. Bron: Sharkbench, 24 augustus 2025.05k10k15k20kActix (roest)21 965Hyper (roest)21 781Axum (roest)21 030Raket (roest)18 047Fastify (Node.js)9 340Koa (Node.js)8 828Express (Node.js)5 766

Bron: Sharkbench, 24 augustus 2025 — Docker/Linux, Ryzen 7 7800X3D.

Axum – het raamwerk dat Aurabase gebruikt voor zijn Rust-kern, geverifieerd in Cargo.toml – verwerkt 21.030 verzoeken per seconde op deze bank. Express, het Node.js-framework dat het meest wordt gebruikt in de productie, verwerkt 5.766 op dezelfde hardware: een factor 3,6. Dit is geen alleenstaand geval. De vier geteste Rust-frameworks vallen allemaal binnen een smal bereik van 18.000 tot 22.000 req/s, terwijl de drie geteste Node.js-frameworks tussen de 5.766 en 9.340 liggen.

In de praktijk meet ‘req/s’ de doorvoer onder aanhoudende gelijktijdige belasting – niet de snelheid van een geïsoleerd verzoek op een site met weinig verkeer. Voor een eindpunt dat elke paar seconden wordt aangeroepen, is het verschil nooit zichtbaar. Het wordt beslissend op een hot endpoint – een real-time flow, een openbare API met veel verkeer, een taak die duizenden oproepen aan elkaar rijgt – waar het aantal verwerkte verzoeken per CPU-kern, voor gelijke hardware, direct de infrastructuurrekening bepaalt.

#
Latentie

Latency volgt hetzelfde patroon

De gemiddelde latentie volgt dezelfde hiërarchie op deze bank: 1,4 tot 1,7 ms voor de geteste Rust-frameworks, vergeleken met 3,4 tot 5,5 ms voor de geteste Node.js-frameworks.

Gemiddelde latentie in milliseconden, Rust versus Node.jsActix (roest) 1,4 ms, Hyper (roest) 1,5 ms, Axum (roest) 1,6 ms, Rocket (roest) 1,7 ms, Fastify (node.js) 3,4 ms, Koa (node.js) 3,6 ms, Express (node.js) 5,5 ms. Bron: Sharkbench, 24 augustus 2025.0 ms1ms2ms3ms4ms5msActix (roest)1,4 msHyper (roest)1,5 msAxum (roest)1,6 msRaket (roest)1,7 msFastify (Node.js)3,4 msKoa (Node.js)3,6 msExpress (Node.js)5,5 ms

Bron: Sharkbench, 24 augustus 2025 — gemiddelde latentie, niet p99.

Dit cijfer is een gemiddelde, geen p99. Garbage-pauzes in een beheerde runtime hebben vooral invloed op de verzendwachtrij: de langzaamste verzoeken, niet de mediaan. Dit is het onderwerp van een speciaal artikel in deze serie: waarom de afwezigheid van een garbage collector de p99-latentie verandert.

#
Waarom

Waarom Rust geen WG-pauze hoeft te betalen

Rust beheert het geheugen op basis van eigendom, gecontroleerd tijdens het compileren - er draait geen garbage collector op de achtergrond en onderbreekt de uitvoering. Het officiële Rust Book vat het als volgt samen: “Geen van de eigendomskenmerken zal je programma vertragen terwijl het draait” (De Rust-programmeertaal, doc.rust-lang.org, geraadpleegd op 24 augustus 2026). Geheugen wordt vrijgegeven zodra de variabele die er eigenaar van is, buiten bereik raakt: een bekend tijdstip tijdens het compileren, niet een onvoorspelbare pauze tijdens runtime.

ownership.rsrust
fn main() {
    let data = String::from("réponse API"); // `data` is eigenaar van de string
    process(data); // bezit vertrekt hier
    // 'data' is hier niet langer geldig - geen bungelende aanwijzer, geen dubbele gratis
} // 'gegevens' worden hier deterministisch vrijgegeven

fn process(s: String) {
    println!("{s}");
} // `s` valt hier buiten het bereik: onmiddellijke vrijgave, zonder afvalinzamelingspas

Node.js daarentegen draait op een enkele JavaScript-thread en delegeert I/O-bewerkingen naar de kernel via een meerfasige gebeurtenislus (timers, uitgestelde callbacks, poll, check...) - maar elke synchrone berekening op die thread, inclusief een garbage collection pass van de V8-engine, blokkeert de uitvoering terwijl deze draait (officiële Node.js-documentatie, nodejs.org, geraadpleegd in augustus 24, 2026). Dit is een verschil in het geheugenmodel, geen implementatiedetail.

#
De nuance

De echte verrassing: de looptijd weegt evenveel als de taal

Het meest contra-intuïtieve resultaat van dezelfde bank heeft geen betrekking op Rust: het betreft Node.js zelf. Express – één en dezelfde code, één en dezelfde API – gaat van 5.766 req/s op Node.js naar 18.917 req/s op Bun, een factor ×3,3, zonder ook maar één regel applicatiecode te veranderen (Sharkbench, 24 augustus 2025).

Express-doorvoer volgens JavaScript-runtime, vergeleken met AxumAxum op roest: 21.030 req/s. Express op broodje: 18.917 req/s. Express op Deno: 6.088 req/s. Express op Node.js: 5.766 vereist/s. In alle drie de gevallen dezelfde Express-code. Bron: Sharkbench, 24 augustus 2025.05k10k15k20kAxum (roest, referentie)21 030Express op broodje18 917Express op Deno6 088Express op Node.js5 766

Bron: Sharkbench, 24 augustus 2025 – dezelfde Express-code, drie JavaScript-runtimes.

Op Deno bereikt dezelfde Express-code een maximum van 6.088 req/s – dichtbij Node.js, ver van Bun. De JavaScript-taal is in alle drie de gevallen identiek; Het is de runtime (de JS-engine, de implementatie van de eventloop, de garbagecollection) die het spel verandert. Het vergelijken van “Rust” met “Node.js” zonder de runtime, versie en framework te specificeren is als het vergelijken van configuraties, niet van talen.

En ga je hierin mee?

Op dezelfde bank piekt het Go Gin-framework op 3.546 req/s terwijl FastHTTP – nog steeds in Go – stijgt naar 5.567 req/s met een latentie van slechts 0,7 ms (Sharkbench, 24 augustus 2025). Twee heel verschillende resultaten voor één taal: een geïsoleerd figuur vat nooit een heel ecosysteem samen.

#
Methodologie

Waarom één enkel benchmarknummer nooit genoeg is

TechEmpower Framework Benchmarks illustreert hetzelfde idee op grotere schaal. De open source repository werd op 24 maart 2026 bijgewerkt en de meest recente ronde (ronde 23) was het onderwerp van een bericht gedateerd 16 maart 2026 (TechEmpower, geraadpleegd op 24 augustus 2026). Dit project voert vele soorten tests uit op honderden implementaties, juist omdat een enkele test nooit een raamwerk vertegenwoordigt, laat staan ​​een taal.

Convex, een speler op de databasemarkt, heeft het duidelijkste standpunt over dit onderwerp geformuleerd: weigeren deel te nemen aan de marketing “staafdiagramoorlog” tussen concurrerende databases, die als misleidend wordt beschouwd. “Het is theater opschalen, niet schalen”, schrijft het team (Convex, geraadpleegd op 24 augustus 2026). Wij delen deze lezing: een naakt cijfer, zonder gepubliceerde methodologie, bewijst niets – noch voor een concurrent, noch voor ons.

Wat het concreet verandert: hardware (CPU, RAM), exacte versie van het raamwerk en runtime, grootte van de JSON-payload, concurrentieniveau en duur van de test variëren allemaal in de rangorde – soms meer dan de taalkeuze zelf. Een bench die deze parameters niet publiceert, reproduceert zichzelf niet en verifieert zichzelf daarom niet. Zie onze complete en reproduceerbare methodologie voor het benchmarken van eenbackend.

#
Aurabase

En Aurabase in dit alles?

De kern-backend van Aurabase is geschreven in Rust, op axum en tokio – gecontroleerd in de Cargo.toml van de monorepo: tien services (aura-gateway, aura-auth, aura-db…) delen dezelfde werkruimteafhankelijkheid axum (0.8) en dezelfde runtime tokio, in de editie van 2021. De gateway die het verkeer op het datavlak en het beheervlak routeert, is afhankelijk van hyper naast axum. De volledige details staan ​​in ons artikel over , de architectuur van het datavlak/beheervlak van de gateway. De structuur van de Cargo-werkruimte die deze tien services ondersteunt, is gedocumenteerd in ons artikel over de Cargo-werkruimte.

Wat we nog niet hebben, is een gepubliceerd Aurabase-doorvoer- of latentiecijfer met gedocumenteerde methodologie en hardware. Dit is opzettelijk: we publiceren de methodologie liever vóór de figuur dan andersom – dit is het onderwerp van een toekomstig artikel in deze serie.

Voor de volledige architectuurvergelijking – verenigde Rust-kern bij Aurabase versus heterogene stack Elixir/Go/TypeScript/Node gedocumenteerd bij een directe concurrent – zie onze gedetailleerde vergelijking Aurabase versus Supabase. Als u al een project migreert, behandelt de Supabase naar Aurabase migratiegids het schema, het RLS-beleid en de SDK.

#
Gegevens

Bijlage: volledige gegevenstabel

Alle regels die in dit artikel worden geciteerd, zoals gepubliceerd door Sharkbench op 24 augustus 2025 (Docker/Linux, Ryzen 7 7800X3D).

KaderLooptijdVerzoek/enLatentieGeheugen
ActixRoest21 9651,4 ms16,6MB
HyperRoest21 7811,5 ms8,6MB
AxumRoest21 0301,6 ms8,5MB
RaketRoest18 0471,7 ms6,4MB
Snel makenKnooppunt.js9 3403,4 ms57,0MB
KoaKnooppunt.js8 8283,6 ms53,3MB
ExpressKnooppunt.js5 7665,5 ms82,5MB
ExpressBroodje18 9171,3 ms53,3MB
ExpressDeno6 0885,0 ms130,7 MB
GinGa3 5461,0 ms16,7 MB
SnelHTTPGa5 5670,7 ms13,4MB

Citeer deze gegevens: Sharkbench, “Web Framework Benchmarks,” sharkbench.dev/web, voor het laatst bijgewerkt op 24 augustus 2025.

#
Veelgestelde vragen

Veelgestelde vragen

Betekent dit dat Node.js een slechte keuze is?+
Nee. Node.js blijft een solide keuze voor veel backends, vooral als het team al bedreven is in TypeScript en de belasting niet wordt gedomineerd door CPU-computergebruik. De hier gemeten kloof ligt in de ruwe doorvoer en latentie onder hoge concurrentie – niet in de ontwikkelingsproductiviteit of het pakket-ecosysteem. Op Bun is de kloof met Rust aanzienlijk kleiner (18.917 req/s voor Express vergeleken met 21.030 voor Axum): de keuze van de runtime is net zo belangrijk als de taalkeuze.
Waarom is Express zo traag vergeleken met andere Node.js-frameworks?+
Op deze bank is Express (5.766 req/s op Node.js) de langzaamste van de geteste Node.js-frameworks, achter Koa (8.828) en Fastify (9.340). Express dateert uit 2010 en het ontwerp geeft de voorkeur aan de eenvoud van de middleware in plaats van aan de ruwe doorvoer. Tijdens dezelfde runtime zorgt de keuze voor het raamwerk al voor een kloof van ×1,6 tussen Express en Fastify (Sharkbench, 24 augustus 2025).
Hoe is deze benchmark tot stand gekomen en kunnen we deze reproduceren?+
De in dit artikel aangehaalde bench is afkomstig van Sharkbench, een onafhankelijk gemeenschapsproject dat gelijktijdige HTTP-verzoeken, I/O en JSON-serialisatie onder Docker/Linux test op een Ryzen 7 7800X3D, met een laatste openbare update op 24 augustus 2025 (sharkbench.dev/web). Dit is geen Aurabase-bank – we hebben deze niet zelf uitgevoerd of gevalideerd; we citeren hem omdat zijn methodologie en materialen worden gepubliceerd, in tegenstelling tot veel marketingfiguren.
Heeft Aurabase zijn eigen benchmarks gepubliceerd?+
Nee, niet tot nu toe. De Rust/axum/tokio-kern van Aurabase is geverifieerd in de monorepo-broncode, maar er zijn geen Aurabase-specifieke doorvoer- of latentiecijfers gemeten en gepubliceerd. Dit artikel vergelijkt Rust en Node.js in het algemeen, op basis van banken van derden. Dit is geen vergelijking van Aurabase met een concurrent.
Een verschil in doorvoer en geheugen, welk verschil maakt het voor de infrastructuurrekening?+
Op de genoemde bank verbruikt Axum 8,5 MB geheugen vergeleken met 82,5 MB voor Express op Node.js – een factor dichtbij ×10 (Sharkbench, 24 augustus 2025). Minder geheugen per instance en meer verwerkte verzoeken per CPU-kern maken het mogelijk om, voor gelijk verkeer, dezelfde belasting vast te houden met minder of kleinere instances. De werkelijke impact hangt echter af van uw belastingsprofiel (I/O-gebonden of CPU-gebonden) en uw cloudprovider. Dit cijfer is geen automatische besparingsbelofte.
#
Conclusie

Wat te onthouden

Op de hier aangehaalde bank draaien de Rust-frameworks allemaal binnen een smal bereik – 18.000 tot 22.000 req/s, 1,4-1,7 ms – ver vóór de Node.js-frameworks op Node.js zelf (5.766-9.340 req/s, 3,4-5,5 ms). Maar de looptijd verandert net zo veel de situatie als de taal: Express on Bun haalt Axum on Rust bijna in.

Als u een backend alleen op basis van de ruwe prestaties evalueert, moet u de methodologie vóór het getal laten gaan: hardware, versie, payload-grootte, concurrentieniveau. Aurabase heeft nog geen eigen cijfers vrijgegeven; als dat het geval is, komt de methodologie op de eerste plaats.

KLAAR VOOR IMPLEMENTATIE?

Uw backend in vijf minuten.

Geen creditcard vereist · 500 MB gratis · 50.000 MAU