Forge
hu

Forge / Linux · 17–18 Oct 2026

Benchmarks

Ugyanaz a munka, ugyanaz a forgalom. Fedezd fel a rögzített méréseket, értsd meg a módszert, és ismételd meg az egyes teszteket.

192Befejezett mérések
3Ismétlések forgatókönyvenként
0 / 0 / 0Hibák, időtúllépések vagy sikertelen válaszok
Node.js 24Kit: Node.js 24.15.0192 · Befejezett mérésekBefejezve: 2026-10-18 13:56:39 UTC

Total.js 4 0.0.99 · Express 5.3.0 · Fastify 5.12.7 · generator 8.0.0 · Meteor 3.5.2 · AdonisJS 6.21.0 · NestJS · Express 12.1.3 · Total.js 5 0.0.19

Ugyanazon forgatókönyv összehasonlítása

RSS terhelés alatt · MiB

Az oszlopok három ismétlés mediánját mutatják. A szárak a minimumot és a maximumot jelzik. A memória a folyamat RSS értéke MiB-ben; minden tengely nullától indul. A keretrendszerek sorrendje rögzített, nem rangsor.

RSS terhelés alatt · MiB0.047.995.8143.7191.6Total.js 4: 159.3 [150.1–167.0]Total.js 4159.3Total.js 5: 165.7 [164.9–166.7]Total.js 5165.7Express: 90.8 [90.4–91.5]Express90.8Fastify: 91.2 [91.0–91.6]Fastify91.2Node.js http: 67.9 [67.5–69.8]Node.js http67.9Meteor: 168.6 [167.6–171.1]Meteor168.6AdonisJS: 145.3 [144.6–149.7]AdonisJS145.3NestJS · Express: 129.6 [129.4–130.0]NestJS · Express129.6
A forgatókönyv összes mérőszáma
FrameworkKiinduló RSS · MiBRSS terhelés alatt · MiBRSS terhelés után · MiBCPU · %Késleltetés p99 · msCél lefedettsége · %Egészséges futások
Total.js 461.0 [60.9–61.1]159.3 [150.1–167.0]174.3 [172.9–174.5]7.9 [7.8–8.2]5.0 [5.0–5.0]100.0 [100.0–100.0]3/3
Total.js 562.8 [62.8–63.2]165.7 [164.9–166.7]173.8 [173.1–174.3]8.2 [8.1–8.2]6.0 [6.0–6.0]100.0 [100.0–100.0]3/3
Express74.1 [73.9–74.2]90.8 [90.4–91.5]90.9 [90.5–91.6]7.3 [7.1–7.6]5.0 [4.0–5.0]100.0 [100.0–100.0]3/3
Fastify75.9 [75.4–76.8]91.2 [91.0–91.6]91.2 [91.0–91.6]4.9 [4.9–5.0]3.0 [3.0–3.0]100.0 [100.0–100.0]3/3
Node.js http50.2 [50.2–50.2]67.9 [67.5–69.8]67.9 [67.7–70.0]4.4 [4.4–4.5]3.0 [3.0–3.0]100.0 [100.0–100.0]3/3
Meteor124.3 [123.4–125.5]168.6 [167.6–171.1]169.0 [168.5–172.3]12.8 [12.7–12.8]10.0 [8.0–18.0]100.0 [100.0–100.0]3/3
AdonisJS114.3 [113.6–115.4]145.3 [144.6–149.7]145.3 [144.6–149.6]10.7 [10.4–10.7]6.0 [6.0–7.0]100.0 [100.0–100.0]3/3
NestJS · Express100.4 [99.3–101.3]129.6 [129.4–130.0]129.8 [129.4–130.2]8.5 [8.5–8.6]5.0 [5.0–13.0]100.0 [100.0–100.0]3/3
Node.js
Total.js 4 · v24.14.1
Total.js 5 · v24.15.0
Express · v24.14.1
Fastify · v24.14.1
Node.js http · v24.14.1
Meteor · v24.15.0
AdonisJS · v24.15.0
NestJS · Express · v24.15.0

Az értékek az ismétlések mediánja [minimum–maximum]. Minden RSS-érték a fázison belüli medián; a mintavételezett csúcsok a nyers adatokban maradnak. A kiinduló érték a készenléti kérések után következik, ezért nem teljesen kérés nélküli memória. A CPU egy logikai CPU százaléka a mintavételezett ablakban. A p99 a befejezett kéréseket írja le; olvasd a hibákkal és a cél lefedettségével együtt.

A memória egyetlen mérés során

Egy friss folyamat, másodpercenként mintavételezve. Az árnyékolt ablakok a terhelést és a helyreállást jelölik; a terhelést bemelegítés és megnyugvás előzi meg. Az RSS tartalmazza a futtatókörnyezetet, a heapet és a natív memóriát. Nem az aktív JavaScript-heap.

A memória egyetlen mérés során · Total.js 5 · 10501001502000 s23 s45 s68 s90 s113 sMiB
RSSJS heapTerhelésHelyreállás

A készlet letöltése és a gép előkészítése

Futtatás a tesztkészlet előkészítése után

docker run --rm --platform linux/amd64 --cpus 2 --memory 2g --memory-swap 2g --pids-limit 256 --read-only --network none --user "$(id -u):$(id -g)" --tmpfs /tmp:rw,nosuid,nodev,size=512m,mode=1777 -v "$PWD/results:/results" forge-benchmark-local node benchmarks/v2/run.cjs --frameworks totaljs --workloads hello --rates 1000 --seconds 60 --warmup 15 --rest 30 --reps 3 --connections 32 --out /results/my-run.json

A parancs a választott futtatás befagyasztott csomagját használja. Egy újrafuttatás összehasonlítása előtt egyeztesd a hardvert, a konténerkorlátokat és a háttértevékenységet. Végül ellenőrizd a megfelelő v2/verify.cjs-sel.

Hogyan olvasd az eredményt

Ugyanazt a terhelést hasonlítsd össze ugyanazon célütem mellett, és olvasd együtt a késleltetést, a CPU-t, a memóriát, a hibákat és a cél lefedettségét. A futtatókörnyezet verziója is számít. Ezek a mérések nem bizonyítják, hogy egy keretrendszer mindig kevesebb erőforrást használ. A Total.js 4 és 5 külön szerepel; mindkettő a rögzített megvalósítását és futtatókörnyezetét használja.

Mit mértünk

Nyolc adapter, négy terhelés és közös célok: 100 és 1000 kérés/s, összesen 192 mérés. Minden mérés friss éles folyamatot indít: válaszellenőrzés, 1,5 s alapfázis, 15 s bemelegítés, 6 s megnyugvás, 60 s terhelés és 30 s helyreállás. Mindhárom ismétlés megmarad. Az adaptereket egymás után mértük. A sikeres válaszok tartalmát a terhelés előtt és után ellenőrizzük; a generátor legfeljebb 32 kapcsolatot kér.

A Total5 kompakt NEWSCHEMA-t és közvetlen vezérlőt használ a JSON érvényesítéséhez; a kis JSON-válaszokat a vezérlő közvetlenül adja vissza. Az összehasonlítás teljes rögzített forgatókönyveket tartalmaz, soha nem a legjobb számszerű eredményt. A Meteor a csak szerveres éles bundle-jét használja; a NestJS az Express-adapterét. A natív érvényesítők a mért tartalmat fedik le; az elutasítás és az átalakítás keretrendszerenként eltérhet.

Környezet

Megosztott Linux x64 gazdagép, Intel Core i7-6700. Minden mérési konténer 2 logikai CPU-ra és 2 GiB-ra volt korlátozva, külső hálózat és közzétett portok nélkül. A generátor és a szimulált függőség ugyanabban a konténerben futott. A Node 24.14.1-et a Total4, az Express, a Fastify és a Node http használta; a Node 24.15.0-t a Total5, a Meteor, az AdonisJS és a NestJS, összhangban a Meteor-bundle futtatókörnyezetével. A futtatókörnyezet verziója minden keretrendszer mellett látható: a különbségek nem tulajdoníthatók egyedül a keretrendszernek. Az éles szolgáltatások a gazdagépen maradtak.

Mit nem bizonyítanak ezek az eredmények

Ez rögzített ütemű, zárt hurkú kísérlet, nem a maximális áteresztőképesség rangsora. A beállított cél elérése nem bizonyítja, hogyan kezeli egy adapter a független érkezéseket vagy a telítettséget. Volt némi CPU-kvóta általi fojtás, amelyet az ellenőrzés rögzített. Három rövid ismétlés nem bizonyítja a hosszú távú stabilitást, a memóriaszivárgás hiányát, az éles biztonságot, a Flow viselkedését vagy a memóriahasználatot Raspberry Pi-n. A szemétgyűjtést nem kényszerítettük ki. Az RSS a forgalom megszűnése után is lefoglalt maradhat.

Egy cella egészséges, ha a befejezett kérések elérik a cél legalább 95%-át × a generátor időtartamát, a p99 legfeljebb 250 ms, és a hibák, időtúllépések és nem 2xx válaszok száma nulla. Ez a küszöb nem állít egyenlő maximális kapacitást.

Eredeti bizonyítékok

Integritás- és környezetellenőrzés · SHA-256 ellenőrző összegek · JSON · Markdown

Reprodukálás és ellenőrzés

Használj üres könyvtárat Dockerrel (Linux-konténerek), curllel és tarral. A gazdagépen nincs szükség Node.js-re: az ellenőrzőösszeg-ellenőrzés és a tesztcsomag is Node 24.15.0-t használ a Dockerben. Az első építés függőségeket tölt le és lefordítja a Meteort, ami néhány percig tarthat. Az előkészítéshez internet kell; a tesztkonténereknek nincs külső hálózatuk. Minden mért forgatókönyv körülbelül hat percig tart.

A készlet mind a nyolc adaptert Node v24.15.0-on futtatja. A közzétett mérések megtartják az eredeti futtatókörnyezetüket, amelyeket a táblázat mutat.

A teljes tesztkészlet letöltése

1. Letöltés és előkészítés. A hivatkozás tartalmazza a futtatót, az adaptereket és a függőségi zárolásokat; nem kell telepíteni a Forge-ot vagy klónozni egy tárolót. Üres könyvtárban futtasd a következő parancsokat. Ha a gombbal töltötted le, tartsd meg a sources.tar.gz fájlnevet, és hagyd ki a curlt.

curl --fail --location --output sources.tar.gz 'https://forge.totaljs.es/benchmarks/node-24.15.0/sources.tar.gz' &&
docker run --rm --platform linux/amd64 --network none -v "$PWD:/kit:ro" node:24.15.0-bookworm node -e 'const fs=require("node:fs"),crypto=require("node:crypto");if(crypto.createHash("sha256").update(fs.readFileSync("/kit/sources.tar.gz")).digest("hex")!=="65801cd865a3fc961e69ba8df421ed198acdc399d29934714fb954e4de1db651")throw Error("SHA-256 mismatch");' &&
tar -xzf sources.tar.gz &&
docker build --platform linux/amd64 -t forge-benchmark-local . &&
mkdir -p results

2. A telepítés ellenőrzése (körülbelül 15–30 másodperc). Ez a rövid teszt létrehozza a smoke.json fájlt, és ellenőrzi a rögzített bemeneteit; nem közzétehető teljesítményeredmény.

docker run --rm --platform linux/amd64 --cpus 2 --memory 2g --memory-swap 2g --pids-limit 256 --read-only --network none --user "$(id -u):$(id -g)" --tmpfs /tmp:rw,nosuid,nodev,size=512m,mode=1777 -v "$PWD/results:/results" forge-benchmark-local node benchmarks/v2/run.cjs --smoke --frameworks totaljs --workloads hello --rates 1000 --out /results/smoke.json
docker run --rm --platform linux/amd64 --cpus 2 --memory 2g --memory-swap 2g --pids-limit 256 --read-only --network none --user "$(id -u):$(id -g)" --tmpfs /tmp:rw,nosuid,nodev,size=512m,mode=1777 -v "$PWD/results:/results" forge-benchmark-local node benchmarks/v2/verify.cjs /results/smoke.json --allow-smoke

3. A választott mérés futtatása és ellenőrzése. Az eredmények a kiválasztott benchmarks könyvtár results/my-run.json fájljába kerülnek. A futtató nem írja felül a meglévő kimenetet: ismétléshez használj másik fájlnevet. Az ellenőrzés a teljességet és a bemeneteket vizsgálja, nem az egyezést a közzétett számokkal.

docker run --rm --platform linux/amd64 --cpus 2 --memory 2g --memory-swap 2g --pids-limit 256 --read-only --network none --user "$(id -u):$(id -g)" --tmpfs /tmp:rw,nosuid,nodev,size=512m,mode=1777 -v "$PWD/results:/results" forge-benchmark-local node benchmarks/v2/run.cjs --frameworks totaljs --workloads hello --rates 1000 --seconds 60 --warmup 15 --rest 30 --reps 3 --connections 32 --out /results/my-run.json
docker run --rm --platform linux/amd64 --cpus 2 --memory 2g --memory-swap 2g --pids-limit 256 --read-only --network none --user "$(id -u):$(id -g)" --tmpfs /tmp:rw,nosuid,nodev,size=512m,mode=1777 -v "$PWD/results:/results" forge-benchmark-local node benchmarks/v2/verify.cjs /results/my-run.json