Hacker News new | past | comments | ask | show | jobs | submit login

These always make me feel bad. Everything I use or have used is in the < 15% performance rank.

Do the ones at the top (like Actix Pg for example) provide everything you need to do real development, or are they stripped down? In other words, is this comparing track bikes to cross country bikes?




If you read the source code, it’s fair to say that while you can use the frameworks and implementations at the top to build your own systems, they would likely perform slower than these benchmarks as you add more features to them. Now, you might not need to add features, and that’s fair, but then you should compare implementations equally and that’s impossible when not every benchmark is written with identical algorithms and implementation code, for, well, obvious reasons.

It’s worth looking at low level HTTP, socket and concurrency management if you want faster performance, but that’s not really a language-exclusive feature at that point. And the more realistic you make the benchmark — the more communication between microservices, for example - the more your application architecture, deployment hardware, kernel and network tuning, and so on can play a role.

I am reminded of http://rachelbythebay.com/w/2020/10/14/lag/ for example, as something really low level you probably don’t need to worry about… until you do. http://rachelbythebay.com/w/2020/05/07/serv/ also. The same is true of most of the performance optimization at the top. Really fast? Yes. Useful? Depends on the rest of your code. Are you writing haproxy? How much does your app really need to do? Read the benchmark source code and get inspired, maybe.

My conclusions for the moment: Switch to Go if low memory usage and high performance is as critical to you as post-1.0 stability. Go is generally stable these days ;-) Otherwise if instability can be tolerated but you want high performance, use one of these newer web server techniques and write a web server in unmanaged C++ that has very minimal functionality with language bindings. Just-js can serve as an example. Heck, the PHP benchmarks show that if you use PHP to write your own HTTP server you can still achieve high performance. That tells me the advantage here goes to web servers that literally “do less” rather than picking a language as faster over another language… especially when most (all?) languages can interface with C or C++ to do the HTTP layer at high performance while writing your code in whatever language you choose…


I've noticed Rust frameworks are invading the top ranks in the last couple rounds. Of course there was lots of .. controversy over unsafe in actix.

I wonder if the current actix-core is the rewritten/safer one once a bunch of Rusters wrestled/annoyed the original author into handing it over. If so, it's still near the top.


Actix is entirely a community project now, and a big scrutiny has been placed on the few instances of unsafe code that still remain. They should be correct/verified at this point.


The source code is available on github: https://github.com/TechEmpower/FrameworkBenchmarks

Techempower classifies each one. Actix is what they call a "platform"

>a platform may include a bare-bones HTTP server implementation with rudimentary request routing and virtually none of the higher-order functionality of frameworks such as form validation, input sanitization, templating, JSON serialization, and database connectivity


As you move into team developed, non-trivial, real-world production apps, you move further down the list.

Even if you use the top ones in the list, you will have to build abstractions in code to handle software complexities. Those abstractions will reduce performance.

I do wonder, if we could use AI to dynamically remove those abstractions, to the extent possible and transform abstracted, multi-layer code to simple functions / compile targets, improving performance. Sort of like looking at the project, at this instant, and folding all database / processing code into higher performance code that reduces function calls or object instantiations.


Really depends upon what you're doing. A lot of these benchmarks get a lot closer together depending upon that. E.g. compare "fortunes" to "multiple query".


Having been part of a startup using Tcl to do a Rails like stack in 2000, and later migrated to ASP.NET, I learned to only use development stacks with JIT/AOT compilers out of the box.

Yes they offer everything we need for real development at enterprise scale.


FWIW, we use Atreugo (#15 and #21 in this round) for most of our applications, and it does everything we need.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: