Look, Everyone Claims Their Runtime is Fastest

JavaScript Performance Chart

Here's the thing about JavaScript runtime benchmarks: they're mostly synthetic garbage that has fuck-all to do with your actual app. But the numbers are still useful if you know how to read them without drinking the performance Kool-Aid.

These Tests Run on Monster Servers You Don't Have

The TechEmpower benchmarks run on absolute beast machines - Intel Xeon with 32 cores and 32GB RAM. That's way beefier than your MacBook Pro or that AWS t2.micro you're running your side project on.

Reality Check on Test Environment:

  • 32 cores (your laptop has 8 if you're lucky, and 4 are thermal throttling)
  • 32GB RAM (your production server probably has 4GB and Slack is using 2GB)
  • 10Gbps dedicated network (your Docker containers are fighting over 100Mbps)
  • Multiple load generators (you'll ab -n 1000 and call it testing)
  • 15-minute tests with warmup (users close the tab after 3 seconds)

Bun Absolutely Annihilates Node.js (But There's Always a Catch)

Performance Comparison (Requests per Second - tested on identical hardware):

Bun v1.2.21:      ████████████████████████ 68,000
Deno v2.4.5:      ████████████ 29,000  
Node.js v22.19.0: ████████ 14,000

The raw numbers are brutal for Node.js: Bun hits 68,000 requests per second while Node.js with Express manages a pathetic 14,000. That's nearly 5x faster. If you're still using Express and wondering why your API feels sluggish, this should hurt.

Deno sits in the middle at 29,000 requests per second, which is respectable but not earth-shattering. When you bump up the concurrency, Bun hits 110,000 requests per second - at this point Node.js looks like it's running on a potato.

Why Bun is so damn fast: It's built on JavaScriptCore (Safari's engine) instead of V8, and their HTTP server is written in Zig, not JavaScript. Meanwhile, Node.js is still dragging around decades of legacy bullshit that makes everything slower than it needs to be.

Your AWS Bills Will Thank You

Cold Start Performance:

  • Bun: 50-80ms startup ⚡
  • Node.js: 150-200ms startup 🐌
  • Deno: 120-180ms startup

Memory Usage Over Time Chart

Node.js is a memory hog. I learned this the hard way when our production server kept running out of memory every few hours with this lovely error: JavaScript heap out of memory. Spent a whole weekend debugging what turned out to be event listeners that never got cleaned up. Bun uses 3x less memory than Node.js for the same workload, which means fewer 3am pages about OOM crashes.

The numbers are real: in production, switching to Bun saves 20-30% on memory usage. That translates to actual dollars when you're running containerized apps that need less RAM per pod.

Why Node.js eats so much memory: It's carrying around a bunch of legacy crap for backwards compatibility. Every Buffer gets duplicated, every string gets converted multiple times, and V8's garbage collector is complex as hell. Bun stripped out all that cruft.

npm install Takes Forever and Breaks Randomly

The most painful part of Node.js development? Waiting for npm install to finish while your CPU fan sounds like a jet engine. It takes 2 minutes on a good day, and half the time it fails with some cryptic EACCES: permission denied error or ETIMEOUT bullshit.

Bun install finishes in 8 seconds for the same packages that take npm 120 seconds. That's not just a little faster - that's life-changing for your development workflow. CI/CD pipelines that took 5+ minutes now finish under 2 minutes.

Cold start times matter for serverless: Bun boots in 50-80ms, Node.js takes 150-200ms. If you're running AWS Lambda, faster cold starts mean 30-50% lower bills for short functions. Check out serverless performance optimization tips.

These Benchmarks Don't Mean Shit if Your App is Database-Bound

Here's the reality check nobody talks about: real-world testing with JWT validation, PostgreSQL queries, and PDF generation shows Bun only 37% faster than Node.js, not 5x.

Why? Because your app spends most of its time waiting for the database to return results, not parsing HTTP requests. When PostgreSQL takes 50-200ms to execute a query, the runtime's 1-5ms overhead becomes irrelevant.

The real performance bottlenecks in your app:

If you're database-bound, optimize your queries with `EXPLAIN ANALYZE` before switching runtimes. If you're API-bound, add Redis caching. The 3x performance gains from switching to Bun only matter if JavaScript execution is actually your bottleneck.

So where do these impressive numbers come from? Let's break down the actual performance data...

The Numbers That Should Make You Question Your Life Choices

Performance Metric

Node.js v22.19.0 (LTS)

Bun v1.2.21

Deno v2.4.5

Reality Check

HTTP Requests/sec (Express)

14,000 req/s

68,000 req/s

29,000 req/s

If you're still using Express, this should hurt

HTTP Requests/sec (Native)

60,000 req/s

110,000 req/s

67,000 req/s

Bun's native server is a beast

Cold Start Time

150-200ms

50-80ms

120-180ms

Your Lambda bills will thank you

Memory Usage (Hello World)

100% (baseline)

33% (3x less)

50% (2x less)

Node.js is a memory hog

Package Install Speed

120s (npm)

8s (bun install)

12s (deno cache)

npm install takes forever and you know it

Real-World Workload

13,254 req/s

18,473 req/s

16,814 req/s

Still faster, but not as dramatic

Response Latency (p99)

15ms

13ms

20ms

Deno chokes under pressure

Throughput (MB/s)

320 MB/s

485 MB/s

685 MB/s

Deno actually wins something!

CPU Efficiency

100% (baseline)

90% (10% less)

95% (5% less)

Bun does more with less CPU

Why Bun is Fast and What Actually Breaks When You Switch

![Runtime Architecture Comparison](https://images.ctfassets.net/aq13lwl6616q/5d

NJ6fFbGeeOnWIxPhZyW6/933b2363c3b6ccfc1987ad6ad735eef0/usage_data.jpg)

Look, the benchmarks are impressive, but let me tell you what actually happens when you try to migrate a real production app.

Spoiler: it's not all rainbows and 5x performance gains.

Bun Breaks Half Your npm Packages

The reality nobody talks about: Bun uses Java

ScriptCore (Safari's engine) instead of V8, which means a bunch of npm packages that rely on V8 internals will shit the bed.

I learned this the hard way when our image processing library crashed with this helpful error: `TypeError:

Cannot read property 'byteLength' of undefined. Spent 3 hours debugging what turned out to be missing ArrayBuffer` methods.

What actually broke in our migration:

  • `sharp` (image processing)
  • threw `Error:

Cannot read property 'data' of null`, needed different build

Node.js V8 has decades of cruft but at least everything works. V8's garbage collector causes random 50-200ms pauses when it decides to clean house, but it's predictable. JavaScriptCore is faster to start but occasionally does weird shit with memory allocation.

Deno's security model is annoying as hell until you actually get hacked.

Every file read requires `--allow-read`, every network call needs `--allow-net`.

It's secure by default, but your startup script becomes a mess of permissions flags.

Express is a Performance Disaster

Express.js Request Flow:

Request → Body Parser → CORS → Auth → Logger → Your Code → Response
         ↓ allocates  ↓ adds   ↓ JWT  ↓ writes ↓ finally!
         objects     headers   check  to disk  some business logic

Here's why your Express API is slow: Every request goes through 15 layers of middleware bullshit.

Body parsing, CORS, logging, auth, validation

  • each one allocating objects and calling functions. Bun's native HTTP server skips all that and handles requests in Zig code, not JavaScript.

The Express middleware tax:

  • `body-parser`
  • converts your JSON 3 times
  • `helmet`
  • adds security headers you probably don't need
  • `morgan`
  • logs every request even in production
  • `cors`
  • allows every origin because you forgot to configure it
  • Your custom middleware
  • because you love reinventing wheels

**Fastify is better than Express** but still nowhere near Bun's native performance.

At least it doesn't serialize/deserialize JSON multiple times per request.

Deno's HTTP story is confusing

The performance is decent but the APIs keep changing between versions.

Memory Leaks Will Ruin Your Weekend

Typical Node.js Memory Pattern:

Memory Usage Over Time:
100MB ████████████████████████████████████████████████
 80MB ████████████████████████████████████████
 60MB ████████████████████████████
 40MB ████████████████
 20MB ████████
   0h    2h    4h    6h    8h → OOM crash at hour 8

Node.js Memory Leak Example

Node.js memory usage grows like cancer if you're not careful.

Lost a weekend to this shit when I found like 800+ Event

Emitter listeners that never got cleaned up, all because someone forgot to call removeListener(). The --inspect flag and Chrome DevTools help, but good luck explaining heap snapshots to your manager who just wants to know why the server crashed at 3am.

Common memory leak culprits:

  • Event listeners that never get removed
  • Timers that keep running after components unmount
  • Circular references in closures
  • Massive JSON objects that never get garbage collected
  • Database connection pools that don't close properly

Bun's memory advantage is real

  • same app uses 3x less RAM.

But debugging memory issues in Bun is harder because fewer tools support Java

ScriptCore profiling. When it breaks, you're basically screwed.

Deno's Rust code doesn't leak memory like JavaScript does, which is nice until you realize your TypeScript still leaks memory and now you have two different memory models to debug.

The Bottom Line: When to Actually Switch

Don't migrate just for the benchmarks. I've seen teams spend 6 months migrating to Bun for a 20% performance improvement they could have gotten by adding a Redis cache.

Switch to Bun if:

  • Your app is CPU-bound (rare for most web apps)
  • You're building a new project and can handle the ecosystem gaps
  • Package installation time is killing your CI/CD pipeline
  • You're running serverless functions where cold start matters

Stick with Node.js if:

  • You have complex native dependencies
  • Your team doesn't have time to debug obscure runtime issues
  • You're database-bound (most web apps)
  • You need the mature tooling ecosystem

Try Deno if:

  • You're building a secure CLI tool or edge function
  • You love Type

Script and hate build steps

  • You enjoy fighting with import URLs and permission flags

The 5x performance gains in benchmarks become 10-30% in production, if you're lucky. Optimize your database queries first, add caching second, then maybe consider switching runtimes third.

**Now, if you're still determined to run performance tests, here's how to do it without misleading yourself...

How to Actually Test These Runtimes (Without Getting Fired)

Benchmark Tool

What You'll Actually Use It For

Reality Check

Command You'll Copy-Paste

Apache Bench (ab)

Quick "is my API working" test

Good for 5-minute sanity checks

ab -n 1000 -c 10 http://localhost:3000/

wrk

Impress your manager with big numbers

More realistic than ab, still synthetic

wrk -t4 -c100 -d30s http://localhost:3000/

Artillery

Actually useful load testing

Complex scenarios, ramp-up patterns

artillery quick --count 100 --num 10 http://localhost:3000/

Autocannon

If you're stuck with Node.js

Made by Node.js people for Node.js

autocannon -c 100 -d 40 http://localhost:3000

Your Browser DevTools

Debug why your API is actually slow

Network tab > API call > 2 seconds

F12, Network tab, cry

Production APM

What actually matters

Real user latency, error rates

DataDog, New Relic, or suffer

time command

See if your app even starts

Startup time matters for containers

time node app.js vs time bun app.js

htop/Activity Monitor

Watch memory usage climb

Your server will run out of memory

Press Q to quit, or not

Frequently Asked Questions

Q

Should I actually switch from Node.js or is this just hype?

A

Depends on your pain points. If you're waiting 2 minutes for npm install every day and your CI/CD pipeline is slow as hell, Bun will genuinely improve your life. If your app spends most of its time waiting for database queries, switching runtimes won't help much.

The honest answer: Bun is legitimately faster, but it breaks a bunch of packages and the ecosystem is still full of rough edges. Unless you're building something new or have serious performance bottlenecks, stick with Node.js and fix your shitty database queries first.

Q

What breaks when you migrate to Bun?

A

Lots of stuff. Native packages like sqlite3, sharp, and bcrypt will probably fail. Your webpack config might break. Some npm packages that rely on V8 internals won't work. Docker builds take longer because fewer base images support Bun.

Migration timeline: Expect 2-4 weeks to fix all the broken dependencies, assuming your app isn't too complex. Budget extra time for debugging obscure JavaScriptCore errors that have zero Stack Overflow answers and make you question your life choices.

Q

Is Deno still relevant or should I ignore it?

A

Deno has good ideas but terrible execution. Import URLs are annoying as hell in large projects.

The permission model is secure but makes development painful. The stdlib keeps changing between versions.

Use Deno if: You're building CLI tools, edge functions, or security-critical apps where the permission model actually helps. Skip Deno if: You're building web apps and value your time.

Q

Do these benchmarks matter for my React app?

A

Probably not. Your React app spends most of its time waiting for API calls, database queries, or rendering the DOM. The runtime performance difference between Node.js and Bun won't affect your user experience if your backend APIs take 100ms to respond.

Focus on the real bottlenecks: That 2-second database query with no indexes, your 5MB bundle size, images that aren't compressed, and third-party scripts that make your page load like it's 1999.

Q

What's the catch with these faster runtimes?

A

Ecosystem immaturity. Bun is missing packages, has weird bugs, and limited production battle-testing. Deno forces you to rewrite imports and fight with permissions. The performance gains come with stability and compatibility trade-offs.

Real production gotchas:

  • Package breakage that takes days to debug with cryptic error messages
  • Obscure runtime errors with no Stack Overflow solutions (you're the first person to hit this bug!)
  • Docker images and deployment tools that don't support the new runtime
  • Team members who have to learn new tooling and debugging techniques (good luck with that)
Q

Will switching save me money on AWS?

A

Maybe, if you're running memory-constrained workloads. Bun uses 3x less memory, so you can fit more processes per EC2 instance or use smaller Lambda functions. But the migration cost and debugging time probably outweighs the AWS savings unless you're running massive scale.

Calculate the real cost: Developer hours at $100+/hour to migrate + debugging weird shit for weeks vs your $200/month AWS bill savings. Unless you're spending $10k+/month on compute, it's probably not worth the pain.

Q

Should I use this for serverless functions?

A

Yes, if cold start time matters. Bun starts in 50-80ms vs Node.js's 150-200ms, which directly reduces your Lambda bill. But you might run into package compatibility issues that take hours to debug.

Lambda deployment is trickier with Bun since AWS doesn't provide official runtime support yet. You'll need custom containers or layers, which adds complexity to your deployment pipeline.

Q

Why do benchmark results vary so much between studies?

A

Everyone tests different things. Some use Express (which is slow), others use native HTTP servers. Some test burst traffic, others sustained load. Some run on ARM, others on x86. The testing methodology matters more than the runtime.

The real lesson: Don't make architecture decisions based on synthetic benchmarks. Test your actual application with realistic workloads.

Q

When should I actually consider migrating?

A

Only if you have a specific problem that these runtimes solve:

  • Package install time is killing your CI/CD → Bun's 15x faster installs help
  • Cold start costs are high in serverless → Bun's faster startup saves money
  • Memory usage is maxing out containers → Bun's 3x memory efficiency helps
  • You're starting a new project → Lower migration risk

Don't migrate if: Your app is database-bound, you have complex native dependencies, or you don't have time to debug runtime-specific issues for 2-4 weeks.

Related Tools & Recommendations

review
Recommended

Which JavaScript Runtime Won't Make You Hate Your Life

Two years of runtime fuckery later, here's the truth nobody tells you

Bun
/review/bun-nodejs-deno-comparison/production-readiness-assessment
100%
integration
Recommended

Bun + React + TypeScript + Drizzle Stack Setup Guide

Real-world integration experience - what actually works and what doesn't

Bun
/integration/bun-react-typescript-drizzle/performance-stack-overview
70%
troubleshoot
Recommended

Fix Docker Daemon Connection Failures

When Docker decides to fuck you over at 2 AM

Docker Engine
/troubleshoot/docker-error-during-connect-daemon-not-running/daemon-connection-failures
59%
troubleshoot
Recommended

Docker Container Won't Start? Here's How to Actually Fix It

Real solutions for when Docker decides to ruin your day (again)

Docker
/troubleshoot/docker-container-wont-start-error/container-startup-failures
59%
troubleshoot
Recommended

Docker Permission Denied on Windows? Here's How to Fix It

Docker on Windows breaks at 3am. Every damn time.

Docker Desktop
/troubleshoot/docker-permission-denied-windows/permission-denied-fixes
59%
integration
Recommended

Claude API Code Execution Integration - Advanced Tools Guide

Build production-ready applications with Claude's code execution and file processing tools

Claude API
/integration/claude-api-nodejs-express/advanced-tools-integration
56%
troubleshoot
Recommended

Fix MongoDB "Topology Was Destroyed" Connection Pool Errors

Production-tested solutions for MongoDB topology errors that break Node.js apps and kill database connections

MongoDB
/troubleshoot/mongodb-topology-closed/connection-pool-exhaustion-solutions
52%
integration
Recommended

MongoDB + Express + Mongoose Production Deployment

Deploy Without Breaking Everything (Again)

MongoDB
/integration/mongodb-express-mongoose/production-deployment-guide
50%
news
Recommended

Google Hit with €2.95 Billion EU Fine for Antitrust Violations

European Commission penalizes Google's adtech monopoly practices in landmark ruling

OpenAI/ChatGPT
/news/2025-09-05/google-eu-antitrust-fine
47%
compare
Recommended

Bun vs Deno vs Node.js: Which Runtime Won't Ruin Your Weekend?

A Developer's Guide to Not Hating Your JavaScript Toolchain

Bun
/compare/bun/node.js/deno/ecosystem-tooling-comparison
43%
tool
Recommended

Google Kubernetes Engine (GKE) - Google's Managed Kubernetes (That Actually Works Most of the Time)

Google runs your Kubernetes clusters so you don't wake up to etcd corruption at 3am. Costs way more than DIY but beats losing your weekend to cluster disasters.

Google Kubernetes Engine (GKE)
/tool/google-kubernetes-engine/overview
37%
review
Recommended

Kubernetes Enterprise Review - Is It Worth The Investment in 2025?

integrates with Kubernetes

Kubernetes
/review/kubernetes/enterprise-value-assessment
37%
troubleshoot
Recommended

Fix Kubernetes Pod CrashLoopBackOff - Complete Troubleshooting Guide

integrates with Kubernetes

Kubernetes
/troubleshoot/kubernetes-pod-crashloopbackoff/crashloop-diagnosis-solutions
37%
alternatives
Recommended

GitHub Actions Alternatives for Security & Compliance Teams

integrates with GitHub Actions

GitHub Actions
/alternatives/github-actions/security-compliance-alternatives
37%
tool
Recommended

GitHub Actions Marketplace - Where CI/CD Actually Gets Easier

integrates with GitHub Actions Marketplace

GitHub Actions Marketplace
/tool/github-actions-marketplace/overview
37%
alternatives
Recommended

Tired of GitHub Actions Eating Your Budget? Here's Where Teams Are Actually Going

integrates with GitHub Actions

GitHub Actions
/alternatives/github-actions/migration-ready-alternatives
37%
news
Recommended

Goldman Sachs: AI Will Break the Power Grid (And They're Probably Right)

Investment bank warns electricity demand could triple while tech bros pretend everything's fine

go
/news/2025-09-03/goldman-ai-boom
35%
troubleshoot
Recommended

npm Threw ERESOLVE Errors Again? Here's What Actually Works

Skip the theory bullshit - these fixes work when npm breaks at the worst possible time

npm
/troubleshoot/npm-install-error/dependency-conflicts-resolution
35%
troubleshoot
Recommended

npm Permission Errors Are Still a Nightmare

EACCES permission denied errors that make you want to throw your laptop out the window

npm
/troubleshoot/npm-eacces-permission-denied/latest-permission-fixes-2025
35%
tool
Recommended

npm - The Package Manager Everyone Uses But Nobody Really Likes

It's slow, it breaks randomly, but it comes with Node.js so here we are

npm
/tool/npm/overview
35%

Recommendations combine user behavior, content similarity, research intelligence, and SEO optimization