Quick result:
based on Techempower round 23, february 2025:
Ranking | Language | Backend framework | Fortunes RPS | Relative ratio |
---|---|---|---|---|
Performance ranking of popular backend frameworks in 2025
Motivation:
As a tech lead, one of my key responsibilities entails the selection of optimal technologies that align with our business requirements and deliver an exceptional user experience. In pursuit of this goal, I find it imperative to conduct a thorough performance of throughput comparison among the leading frameworks commonly employed for building production-level backend web servers with SQL databases, all within a realistic environment.
Unfortunately, many of the articles available on the internet that attempt to provide such performance comparisons often exhibit bias, lack realism, and are frequently outdated, rendering them unsuitable for use as reliable benchmarks. To date, I have yet to come across an article that offers a clear and unbiased performance assessment among the most widely utilized backend frameworks.
My aim is to rectify this gap in information and provide a clear performance benchmark of the most popular backend frameworks.
Benchmark source data 2025:
Since 2013, TechEmpower has established a backend framework benchmark. They meticulously define benchmark specifications and maintain an open-source approach that encourages contributions from the community. This benchmark has become a respected standard in the tech industry, serving as a reliable yardstick for technology competitors to assess the performance of their solutions (exemple Go Fiber, C# Asp.net, JS Just). So I can trust the Techempower benchmark.
I use data from TechEmpower benchmark round 23 (released on 2025-02-24). The benchmark has many frameworks (> 300), it can be overwhelming when trying to compare the most popular ones.
My goal is to compare only popular, productive, realistic, near production-level, that companies use to build real backend. For all that, I make some filters on this benchmark:
Only some popular frameworks (see list later)
-
Only the Fortunes test that’s the most realistic scenario to measure throughput of a backend web. The result is a number of requests per seconds to the database. Quote from Fortunes test specification:
The Fortunes test exercises the ORM, database connectivity, dynamic-size collections, sorting, server-side templates, XSS countermeasures, and character encoding
-
ORM (Object-Relational Mapper) is Full or Micro, and not Raw: for productivity reason:
- Full: ORM that provide wide functionality, possibly including a query language
- Micro: less comprehensive abstraction of relation model
- Raw: no ORM is used at all, the platform raw database connectivity is used
-
Classification is Fullstack or Micro and not Raw: for productivity reason:
- Fullstack: framework that provide wide features coverage including server side template, database connectivity, form processing and so on
- Micro: framework that provide request routing and some plumbing
- Raw: raw server, not a framework at all
Database: only Postgre for normalization
How I choose Popular Backend Frameworks (PBF):
For programming languages, I use Tiobe index and PYPL index. The programming languages list is Java, C#, Go, Rust, Javascript (JS), Ruby, Python, Php
For popular backend web frameworks, I use data from SimilarTech and BuildWith. I do not choose small, simplistic, fully optimized frameworks which are not popular or can not be used for production-level general use cases.
The final list of popular backend frameworks to benchmark is:
- Java: Spring
- C#: Asp.net
- Go: Fiber
- Rust: Actix
- JS/Node: Express
- Ruby: Rails
- Python: Django
- Php: Laravel
Go is a special case. Any Go frameworks satisfy my filters on “Classification=Full/Micro” and “ORM=Full/Micro”. But I want to have Go in the benchmark. So I need to do some logical deduction to be able to compare.
Although Go Gin enjoys greater popularity compared to Go Fiber, I've decided to opt for Go Fiber due to its significantly superior performance. This choice is made with the intention of ensuring fairness.
Raw benchmark data from TechEmpower round 23:
Here’s the Fortunes tests raw result: (you can see my filters on Filters panel)
Framework: Fullstack, Micro
Language: C#, Go, Java, Javascript, Php, Python, Ruby, Rust
Database: Postgres
ORM: Full, Micro
The raw data is the Fortunes requests per second (RPS) on same hardware, same database Postgres, with framework full stack or micro, ORM full or micro.
There’re 3 cases with logical deduction instead of raw data: Go Fiber, Php Laravel and Rust Actix:
- Go Fiber: there’s only data in Postgres database but without ORM tool. So I make the following logical deduction: Go Fiber Postgres with ORM = Go Fiber Raw * (C# asp.net Postgres with ORM / C# asp.net Raw) = 411213 * (609966 / 741878). This deduction use a hypothesis that the Go Fiber ORM tool have the same performance as C# Asp.net ORM tool. This deduction gives an advantage to Go Fiber because I use the 1st rank framework to normalize.
Go Fiber has another test with option “pre-fork”. This test has the 1st ranking in my filtered Techempower, it has double results (requests per second) then the same Go Fiber without this option. This option lets run multiple processes of Go Fiber on each logical CPU. I do not keep this test in my analysis to be fair because if yes, other frameworks should activate the similar option.
Php Laravel: there’s no data with Postgre database, so I use data with MySQL then compare and make deduction between Laravel and Symphony (=Laravel MySQL / Symphony MySQL * Symphony Postgre)
Rust Actix: In the official round 23, there’s any data for Rust Actix with my filters. So I have to take another run on date of 2025-03-15 ace9c97f-253c-40d7-a730-c8a3b11b8d68
Once having normalized Fortunes RPS, I compute a relative ratio comparing each framework over a baseline, then finally build the performance ranking and the comparison table.
Result 1: Performance ranking of popular backend frameworks in 2025
Ranking | Language | Backend framework | Fortunes RPS | Relative ratio |
---|---|---|---|---|
Performance ranking of best popular backend frameworks in 2025
Here's the final performance ranking in 2025 of backend frameworks:
- C# - Asp.net: 36.3 times more performant than the baseline
- Go - Fiber: 20.1 times more performant than the baseline
- Rust - Actix: 19.1 times more performant than the baseline
- Java - Spring: 14.5 times more performant than the baseline
- JS/Node - Express: 4.7 times more performant than baseline
- Ruby - Rails: 2.5 times more performant than the baseline
- Python - Django: 1.9 times more performant than the baseline
- Php - Laravel: the baseline
Result 2: Performance comparison table of popular backend frameworks in 2025
The row and column are ordered from the best to worst performance:
How to read the table: for example take the C# Asp.net column, then:
- C# asp.net is 180% more performant than Go Fiber
- C# asp.net is 190% more performant than Rust Actix
- C# asp.net is 250% more performant than Java Spring
- C# asp.net is 781% more performant than JS/Node Express
- C# asp.net is 1434% more performant than Ruby Rail
- C# asp.net is 1868% more performant than Python Django
- C# asp.net is 3631% more performant than Php Laravel
Take the Go Fiber row, then:
- C# asp.net performance is 180% of Go Fiber
- Rust Actix performance is 95% of Go Fiber
- Java Spring performance is 72% of Go Fiber
- JS/Node Express performance is 23% of Go Fiber
- Ruby Rails performance is 13% of C# Go Fiber
- Python Django performance is 10% of Go Fiber
- Php Laravel performance is 5% of Go Fiber
Result 3: Evolution between 2024 vs 2025
My main remarks
First, congratulations to the C# Asp.net framework for earning the top spot in the ranking. Its performance over the past year has improved by more than threefold, which is truly impressive.
Second, I want to extend my highest praise to Java Spring. In just one year, its performance has increased ninefold, catapulting it into 4rd place.
Third, I was most surprised by the drop in ranking for Rust Actix. It lost its No. 1 spot in 2024. Rust is renowned for its high performance, Linux and Windows even use it in their core operating systems. New system tools such as Chroma, QDrant, Kuasar are now written in Rust instead of Go or C++. However, achieving top performance in a backend web server requires tuning every layer of the framework, from receiving an HTTP request to the database driver, not just optimizing the runtime.
Finally, I see two clear groups of frameworks based on performance. The first, with compiled languages (C#, Go, Java, Rust), delivers higher throughput. The second, with interpreted languages (JavaScript, Ruby, Python, PHP), shows lower performance. This outcome isn’t surprising, since a framework’s speed generally reflects the characteristics of its underlying language.
One last thing, Fortunes test is about throughput performance. There're data for latency (I may add to my analysis). I'd like to see memory usage, to have a better view on performance (throughput, latency, memory). Hope that Techempower update later the specification and add metrics on memory for all the tests.
Conclusion:
This article provides a clear performance comparison among the most popular backend frameworks, based on the Fortunes test of TechEmpower benchmark of round 23. This is purely data. The conclusions drawn from this data are open for anyone to interpret and analyze.
One significant takeaway is related to technology selection. When choosing a backend technology stack, there are various parameters to consider, including popularity, performance, security, productivity, stability, reliability, maintainability, ecosystem, product domain, features, culture, team capabilities, and more. While performance is undoubtedly a crucial factor, especially in domains like Games, Finance, Trading, IoT, and others, it's just one piece of the puzzle.
It's essential to note that this comparison primarily focuses on backend frameworks and not on programming languages. Drawing conclusions like "Rust outperforms Java" or "C# surpasses JS" may seem valid from the data, it's a false conclusion from my analysis. For a direct comparison of programming languages, there are separate benchmarks available for that purpose (like this or that).
The article also addresses the consideration of fairness in framework selection. It raises the question of why not choose extremely fast but less popular frameworks like JS Just, C++ Drogon, Java Vert.x. The rationale for selecting from the list of popular frameworks is to ensure a pragmatic choice that aligns with real-world scenarios.
Imagine you have the responsibility to choose a framework to build a new backend as of today and you know that one choice is made, you will live with that choice for the years to come. Will you bet on some experimental and small frameworks ? Or will you opt for a popular framework which is solid, well-established and battle-tested as in my list ?
One last word, this benchmark is valid as of february 2025. Technology competitors work hard to improve their technology. The ranking in the next round of TechEmpower may change. Wait and see.
Disclaimer
This analysis is based on data from the TechEmpower benchmark. I’m not responsible for the source data, only for my analysis.
Top comments (2)
Great post
Useful post on getting a readable overview! And more realistic by filtering out the exotic. With a small bias for Go? ;) A few things:
Some comments may only be visible to logged-in visitors. Sign in to view all comments.