
Just watched a benchmark testing 8 backend stacks (including Laravel, FastAPI, Go, Rust, Node) on a $12 VPS. Laravel's performance vs. the others is a great talking point.
Hey everyone,
I recently came across an interesting experiment by Arjay McCandless where he tested 8 different backend stacks (Node, Bun, Python/FastAPI, Go, Java/Spring Boot, C#, PHP/Laravel, and Rust) under the exact same load using a super budget server: 1 shared CPU and 2GB of RAM.
The goal was to see how many simultaneous users each stack could support before hitting latency/error thresholds, using a Twitter-style API with a PostgreSQL backend (50k users, 500k posts, 2M likes, querying 20 posts for the feed).
Here is a quick summary of the results:
- The Heavy Hitters (PostgreSQL):
- Rust (Axum) and Go led the pack at ~6,900 and ~6,500 simultaneous users.
- Java (Spring Boot) and C# (.NET) punched way above expectations at ~5,100 and ~4,400.
- Bun hit ~4,200, while standard Node (Express) landed at ~3,250.
- The Lower End:
- Python (FastAPI) capped out at ~2,150 due to connection pool timeouts under pressure.
- Laravel (PHP) struggled massively out of the box, capping at 750 users because of the framework boot overhead per request. (When he stripped Laravel and used raw PHP, it jumped to ~2,700).
- The SQLite Effect: When he swapped PostgreSQL for SQLite (removing the network/process database overhead), Rust skyrocketed to 14,050 simultaneous users on that same $12 machine.
This kind of benchmark is almost a worst-case scenario for heavy full-stack frameworks like Laravel, where the boot-up cost makes up a huge chunk of a lightweight query lifecycle. But how much does this actually matter in real-world CRUD apps where DB queries or external APIs dominate the response time?
Curious to hear what the community thinks especially regarding framework overhead!