Web 框架性能
v0.1.0stable
RustBunJavaKotlinNodeJS
在写 Web 应用的时候,不管你用什么语言,大概率是会选择一个 Web Framework 的,在我的 Stack 里面,有 JVM/Rust/JS 这三大体系,所以我针对这三大体系里面的 Web 框架,做了一个性能测试,毕竟这些框架都是我感兴趣的,也是正在或者将来要使用的。
测试环境如下:
- wrk
- MacBook Pro 16 inch 2019
- MacOS 14.2.1
- CPU 2.3 GHz Intel i9 8 Cores
- Mem 16 GB 2667 MHz DDR4
每个框架都只有一个服务接口,返回 json 数据 “{ "hello" : "world" }” 。并且关闭了所有框架的日志,如果不能关闭日志的会将 level 设置为 warn ,以达到最小影响性能的目的。
使用测试语句,“wrk -t 24 -c 500 -d 30s http://localhost:6000” 进行测试。
测试结果如下:
语言 | 框架 | 请求/秒 | 传输/秒 |
bun | - | 81788.24 | 10.22MB |
bun | elysia | 62943.20 | 7.50MB |
bun | hono | 51609.29 | 6.89MB |
node | - | 28102.89 | 4.61MB |
node | express | 8289.15 | 1.99MB |
node | fastify | 29019.23 | 5.20MB |
java jdk17 | vertx | 68630.89 | 5.76MB |
java jdk21 | springboot | 33597.54 | 8.38MB |
java jdk21 | javalin | 69716.47 | 8.38MB |
java jdk21 | activej | 71402.06 | 8.65MB |
java jdk21 | jooby undertow | 63742.41 | 8.27MB |
java jdk21 | jooby netty | 75872.36 | 9.84MB |
java jdk21 | jooby jetty | 60496.61 | 7.85MB |
java jdk21 | ratpack | 38764.02 | 3.55MB |
kotlin jdk21 | ktor | 43983.76 | 7.80MB |
rust | actix | 104463.27 | 12.45MB |
rust | ntex | 93931.86 | 11.20MB |
rust | rocket | 5372.75 | 1.3MB |
zig | zap | 101451.05 | 18.48MB |
需要说明的是:
- 对于 Rust 的 Rocket 可能不太准确,主要是我不知道怎么关闭或调低日志。大量的日志输出,很显然,会降低性能。
- 返回数据方面,尽量使用框架提供的 json 序列化。如果框架没有提供,Java 方面则使用了 Jackson 包处理。其实,json 序列化本身是非常快的,所以对于结果的影响不大。
总的说来,Rust 🐂🍺!!。
- 在 JS 栈方面,个人推荐 bun 体系的,本身基于 Zig ,性能仅次于 Rust,还能使用 JS/TS 写程序,而且 bun 还在不断进步,值得期待,未来我的项目也会尝试使用 Bun 系列的框架。
- 在 Rust 栈方面,个人推荐 actix 。
- 在 Java 方面,在国内,工作上基本上是 SpringBoot 没啥说的。个人方面,建议使用 Jooby,非常快不说,而且支持的能力比较全面。Javalin 也是很不错的选择,简单易上手。
- 在 Zig 方面,还比较小众,而且 zap 框架本身支持的能力还不够,暂时不推荐。