2024 Web框架性能测试排行总结

Web Frameworks Benchmark

这是一个开源项目,它通过严格的性能测试来比较不同 Rust 网络框架的处理能力。项目通过执行“Hello, World!”这一基础场景,评估每个框架在单位时间内能处理的最大请求数(Req/Sec),从而揭示各框架的潜能和效率。这不仅仅是一场速度的较量,更是对资源利用率的一次深刻探讨。

项目地址:https://web-frameworks-benchmark.netlify.app/result

所有框架都使用wrk(threads: 8, timeout: 8, duration: 15 seconds) 进行基准测试,并发数为 64,256 和 512

用于基准测试的硬件:

  • CPU:8 核(M1 八核处理器)
  • 内存:7 GB
  • 操作系统: Linux
LanguageFrameworkRequests / Second (64)Requests / Second (256)Requests / Second (512)
nim (2.0)caprese (0.1)557,223624,155614,271
rust (1.82)may_minihttp (0.1)531,099577,107602,342
rust (1.82)actix (4.8)510,640568,150590,376
go (1.23)web (0)507,225528,557533,631
rust (1.82)ohkami (0.2)506,612541,508552,995
javascript (ES2019)uwebsockets (20.49)499,848574,607596,710
javascript (ES2019)sifrr (0.0)495,785568,072590,157
php (8.3)workerman (4.2)488,768537,155556,877
java (21)activej (5.5)487,656548,212563,501
javascript (ES2019)mesh (0.6)484,264550,900569,178
nim (2.0)httpbeast (0.4)481,151543,591563,278
php (8.3)mark (2)479,844532,705546,670
java (21)vertx (4.5)478,225536,725550,420
cpp (14/17)drogon (1.9)475,375529,728545,443
kotlin (2.1)jooby (3.5)472,023538,641553,164
go (1.23)gearbox (1.2)470,560505,678510,795
java (21)jooby (3.5)468,913534,751550,208
javascript (ES2019)elysia (1.1)467,848533,329549,806
php (8.3)simps (1)466,413527,329556,354
javascript (ES2019)routejs-uwebsocket (3)465,964526,803543,232
java (21)vertx4web (4.5)461,622521,251531,703
java (21)rapidoid (5.5)460,613517,575531,526
nim (2.0)whip (0.2)457,232510,149529,678
php (8.3)fomo (2.4)456,833521,884551,325

TechEmpower Framework Benchmark

这是包含范围最广泛的web框架性能测试,覆盖了比较典型的使用场景,其可参考性极强。另外,所有测试源代码和软硬件配置都开放,基本得到大家的认可。TFB 挑战是对许多 Web 应用程序平台进行性能比较,这些平台通过 HTTP 执行 JSON、数据库、ORM、HTML 模板。它比较了用 C++、Rust、Go、JS、Java、C# 编写的最佳框架。

应用性能直接影响到托管服务的成本,因此公司在开发应用时需要格外注意应用所使用的Web框架,初创公司尤其如此。此外,糟糕的应用性能也会影响到用户体验,甚至会因此受到相关搜索引擎的降级处罚。在选择框架时,又有许多因素需要考量,但原始性能无疑是其中最容易测评的。不同的框架性能差异极大,即使你充分利用了硬件的性能,错误的框架依然可能带来十倍的性能损耗,虽然不是每个人都会遇到如此极端的情况,但在某些情况下确实如此,因此你有必要了解各框架之间的性能差异。

项目地址:https://www.techempower.com/benchmarks/#hw=ph&test=fortune&section=data-r22

RnkFrameworkBest performance (higher is better)Errors
1may-minihttp585,122100.0%0
2xitca-web578,57398.9%0
3ntex [sailfish]558,33195.4%0
4h2o549,07893.8%0
5vertx-postgres453,40677.5%0
6axum [postgresql]438,99675.0%0
7viz [postgresql]432,60573.9%0
8jooby-pgclient427,68273.1%0
9just-js422,87172.3%0
10salvo [postgres]413,81270.7%0
11redkale-graalvm413,53770.7%0
12actix-http405,14469.2%0
13vertx-web-postgres388,51266.4%0
14ntex [async-std,db]375,05464.1%0
15officefloor-sqlclient367,62362.8%0
16aspcore-ado-pg363,34462.1%0
17vertx-web-kotlin-coroutines-postgres356,67061.0%0
18officefloor-async355,35960.7%0
19lithium-postgres351,47560.1%0
20aspcore-aot-ado-pg350,71259.9%0

总结

前者(TechEmpower) 有实际数据输出,后者全部框架都只输出一个空白页面进行测速比较,所以如果说代表性强的话,还是 TechEmpower 。

个人感觉,Rust语言的框架在目前来说,依旧遥遥领先,在性能和安全性上,从隔壁 Linux 内核之争就可初见端倪。

在PHP中,Workerman依然名列前茅,小企业前期借助 Laravel thinkPHP 敏捷开发、快速上线,后期也能在同语言下,无痛完成重构。

Javascript 背靠 Web 前端和 Ts 两座大山,以及有 uWebSockets.js 的性能加持,也方便让小企业《前后端分离,但人不分离》。

Golang 没能革 Java 的命,就已经开始走下坡路了,在新项目语言的选择上,似乎越来越多人选择 Rust 而不是 Golang,实在可惜。

至于 Java,很难评,也不知道 Oracle 还能霍霍多少年

© 版权声明
分享是一种美德,转载请保留原链接
THE END

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部