关注的是 Fortunes , 模拟真实 Web 应用中常见的数据库读取和模板渲染场景,测试框架的全栈能力。
完整见: https://www.techempower.com/benchmarks/#hw=ph&test=fortune§ion=data-r23
当然框架性能!=实际服务性能,不必较真
补几个php的强者:
![]() |
1
sagaxu 12 小时 21 分钟前
gin 比 spring 慢,很意外
|
![]() |
2
bronyakaka OP @sagaxu 也许是适配了 jdk21 虚拟线程的原因?
![]() |
![]() |
3
BeforeTooLate 12 小时 9 分钟前
@bronyakaka 哈哈,应该把 php 补上,我一开以为 php 不在榜上,看下还是蛮多在 30-50 位置的 php 框架的么
|
4
wryyyyyyyyyyyy 12 小时 2 分钟前
我们 python 是这样的,一直在垫底 😂
|
5
DiamondYuan 11 小时 59 分钟前 ![]() rank 15 的是 just-js , 居然是 js
|
![]() |
6
bronyakaka OP @BeforeTooLate 补了
|
![]() |
7
iorilu 11 小时 58 分钟前
gin 还不如 php 阿
看了下 gin 和 python 得 fastapi 差不多, 怎么以前吹的好像 go 性能比 python 高很多倍一样 |
![]() |
8
bronyakaka OP @DiamondYuan just-js 的核心部分是用 C++ 编写的
|
9
FarmerChillax 11 小时 53 分钟前
@iorilu 如果这么比,你应该拿 fasthttp 和 fastapi 比。。。你怎么不拿 Django 和 Gin 比 :p
|
![]() |
10
hugozach 11 小时 52 分钟前 ![]() 真假 我自己使用感觉 gin 很好啊
|
![]() |
11
PTLin 11 小时 50 分钟前
侧面说明了 web 框架速度不重要,开发体验才重要,大公司遇到性能瓶颈直接横向扩展就行了
|
![]() |
12
liuliuliuliu 11 小时 50 分钟前 ![]() 看这个 tab 的评分会更完整一些
https://www.techempower.com/benchmarks/#hw=ph&test=composite§ion=data-r23 其实里面排名靠前的,很多都是专门为跑分而生的框架,根本不具有实用性 |
![]() |
13
liuliuliuliu 11 小时 36 分钟前
.net 在 35 名
在 Composite scores 里在 18 名 |
14
aloxaf 11 小时 34 分钟前
Rust 前面那一堆框架只有 axum 算有些代表性,话说以前的跑分王 actix 怎么缺席了。
|
![]() |
15
keakon 11 小时 26 分钟前
实际场景数据库才是瓶颈,Multiple queries 排第一的是个 js 框架
|
16
z1829909 11 小时 25 分钟前
@iorilu 就 web 服务这种场景, 感觉 python 的异步 io 比 golang 协程更有优势, 而且可以横向拓展, 通过多个进程弥补 python 自己对 cpu 利用率的问题. 比不上 php 也很正常, swoole workerman 这种也是异步的模型, php 可以使用一些 c 的拓展实现, swoole 更是用 c++写的. php 因为他狗屎的历史问题, 容易被低估.
但是在一些需要比较精细地调度的场景下, python 多进程的粒度太糙, 造成很多浪费, 完全比不上 golang. |
17
w568w 11 小时 24 分钟前
@liuliuliuliu 我们生产服务器有一些接口是用的 actix-web ,实用性很高,写起来很爽,实际统计出异常的次数比其他语言( Python 、Go )低一个数量级
@aloxaf 第二名的 xitca-web 其实就是 actix-web 前主要维护者 Nikolay 重写的,算是精神继承。他之前对 actix-web 里 unsafe 代码太多大为恼火,和其他成员沟通无效后离开项目,重写了他号称「 100% 安全 Rust 」的 xitca-web 。 |
![]() |
18
me1onsoda 10 小时 55 分钟前 ![]() gin 这么简陋的框架居然不如 spring 这巨无霸。。
|
![]() |
19
zwzwzwzwzxt 10 小时 55 分钟前
@w568w #17 差点以为里面的 ntex 才是精神继承,看了它的 example 真的和 actix-web 的 API 几乎一模一样。。
|
![]() |
20
sagaxu 10 小时 44 分钟前
@bronyakaka 2# 没开 virtual threads 。
@BeforeTooLate @iorilu php 有 swoole 和 webman ,大部分逻辑是 C 实现的,micro benchmark 不可能慢。 @liuliuliuliu dotnet 不能用 mvc ,一用 mvc 性能损耗一小半。 @me1onsoda gin 慢的很反直觉,有熟悉 gin 的去优化一下代码么 https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/Go/gin 。 |
![]() |
21
wangtian2020 10 小时 19 分钟前
第一个 nodejs 排 105 ,第一个 bun 排 149 。气冷抖,js 什么时候才能站起来
|
22
tsanie 10 小时 10 分钟前 ![]() 35 - aspnetcore
42 - aspnetcore-aot /doge |
![]() |
23
FightPig 10 小时 0 分钟前
我几乎一直用 rails, 每次看排名都几乎垫底
|
24
hwdq0012 9 小时 53 分钟前 ![]() java quarkus 是编译成原生应用(非 Jit ),
just-js 也是无 gc , 非 jit 的 .net core 是 jit 的 .net core 也有 aot 编译成原生,.net 也有 aot 也能编译为原生应用,不过应该还不适用于所有设备 jit 的话,能和.net core 打的应该没几个 |
![]() |
25
niubiman 9 小时 46 分钟前
要想程序跑得快, 你不加班才奇怪
|
![]() |
26
boneyao 9 小时 45 分钟前 ![]() 我喜欢 django
|
![]() |
27
avenger 9 小时 43 分钟前 via iPhone
laravel 都能排到 152
有点意外啊 |
28
NessajCN 9 小时 42 分钟前
axum 还挺高
|
![]() |
29
rogwan 9 小时 30 分钟前
flask 连前 500 都进不了,还是不配有名字?
|
![]() |
30
0x676e67 9 小时 29 分钟前 ![]() 第一名是跑在手搓的 rust 协程
|
![]() |
31
lfitzgerald 9 小时 24 分钟前
@wryyyyyyyyyyyy 但是 python 开发爽啊
|
![]() |
32
sagaxu 9 小时 21 分钟前
@hwdq0012
哪看到做 aot 了? Java aot 性能一般是不如 JIT 的。 https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/Java/vertx/pom.xml |
![]() |
33
lesismal 9 小时 19 分钟前 ![]() 虽然能反映出很多框架的性能,但 techempower 也是我见过最逗比的没底线的 benchmark 之一了,plaintext 里包括 gnet 、evio 这种不完整 http 功能的简单拼接字符串方式的测试代码也可以放到排名结果里,甚至这种能拿个 plaintext 第一至今还贴在这种 repo 仓库里作为宣传工具误导不知情的同行。而且这样一来,助长了更多的不良之风:
https://github.com/lesismal/nbio/issues/337#issuecomment-1663771688 go 的 cpu 能力和 java 是差不多的,这种简单测试的结果不意外。 帖子里一些人觉得 gin 简单,是一种错觉、简单与复杂对比错了层面: 1. 在这个简单 http 功能测试对比 gin 和 spring 性能的场景,应该是看 http 基础部分实现的性能复杂度。单就 http 相关的实现,gin 等 go 框架在性能消耗上的浪费可能比 spring 还多,所以 fast 系能赢、gin 和其他几个基于标准库的难赢 2. 各位对比的简单是作为 http 框架甚至框架生态圈的大的功能集合的简单与复杂、但是这部分与这个性能测试是没什么关系的 实际工程中高并发场景,影响性能的重要因素之一是并发度,主要是连接数、协程池|线程池。 java 非 netty 通常的业务线程池 size 设置不会特别大,几百几千,如果遇到并发很大并且一些请求阻塞时间较长时,这些阻塞时间长的请求会持续占用线程,线程池 size 小、等待得多了甚至整个线程池的 worker 都阻塞、临时耗尽了,其他连接的请求要排队,cpu 利用率就跑不上去、业务慢了。 go 这种协程成本低,即使时 4c8g 这种硬件,随便也可以跑几万甚至 10w 级别的协程数量,对应的能服务的连接数就更多,所以部分连接的请求即使阻塞了、处理其他大部分连接的协程就被调度起来继续运行了、cpu 不用等待,因为几万甚至 10w 级别的协程数量远大于 response write 这些 syscall 、远大于下游的 db 操作、或者其他 io 等慢阻塞的并发度,所以整体上不会导致 cpu 利用率降低。 我没有仔细研究这个测试,但没有找到实际测试的连接数并发度,也没有看到各个语言框架对应的 cpu 、内存消耗。 不同的参数会有不同的阈值,如果只是一组参数测试得出结论,不能够准确说明实际业务中不同场景不同时段等的真实性能表现。 |
![]() |
34
wangyzj 8 小时 48 分钟前 ![]() 哈哈哈,rust 性能真好
但我又想起了,ts 编译器换成 go 的事情 |
35
james122333 8 小时 42 分钟前 via Android
gin 使用的是标准库的 net/http
这个本来效能就不好 可以 gin+fasthttp 我在公司是使用这种方式的 效能还不错 当然私人用绝对是手搓一个出来 |
36
james122333 8 小时 41 分钟前 via Android
再说一次 go 的标准库不是效能取向的
|
![]() |
37
guiyumin 8 小时 36 分钟前 via iPhone
Laravel 岂不是第 10000 名
|
38
guotie 8 小时 34 分钟前
pg 才是最大赢家
|
![]() |
39
jmllx1963 8 小时 27 分钟前
goframe 不错不错😌
|
![]() |
40
Al0rid4l 8 小时 26 分钟前 ![]() 有些框架(甚至算不上框架)要么是刷分专用, 整得跟裸写 HTTP 服务器似的, 要么生态太小啥都得自己搓, 实际业务中间件加一堆就变得跟某些框架开箱即用差不多, 像 uwebsockets.js 这种一般不会有人直接拿来用, 但是可以用 elysia(bun 底层是 uwebsockets.js), just-js 这种更是基本上跟 js 也没啥关系了
挑些主流框架看看就行, 像 axum, vertx-web 这两个是真的硬, asp minimal apis 也凑合, elysia 写点简单的东西挺不错的(但是据说 js 代码量多了会被 jscore 拖累), quarkus 值得关注 |
41
back0893 8 小时 15 分钟前
workerman 这么强?
|
![]() |
42
min 7 小时 57 分钟前
不是吧,我 csharp dotnet 怎么退出前排了
|
43
idealhs 7 小时 56 分钟前
一说性能前几名,一看生态没人用
|
44
Leviathann 7 小时 53 分钟前
只能说 vertx 是真 nb
可能是被大规模使用的框架里面排名最高的 |
![]() |
45
maiyasu 7 小时 51 分钟前 ![]() 这个一点参考价值都没有,不必当真,只有用框架出来的产品 产出比高才是王道
|
![]() |
46
BeforeTooLate 7 小时 47 分钟前
@guiyumin 不是,居然再 152 名
|
![]() |
49
sagaxu 7 小时 26 分钟前
@hwdq0012 quarkus/vertx 支持原生编译 != 该评测使用了这个特性,显而易见还是用 JRE 跑的
https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/Java/vertx/vertx.dockerfile CMD ["java", "-Xms2G", "-Xmx2G", "-server", "-XX:+UseNUMA", "-XX:+UseParallelGC", "-Djava.lang.Integer.IntegerCache.high=10000", "-Dvertx.disableMetrics=true", "-Dvertx.disableH2c=true", "-Dvertx.disableWebsockets=true", "-Dvertx.flashPolicyHandler=false", "-Dvertx.threadChecks=false", "-Dvertx.disableContextTimings=true", "-Dvertx.disableTCCL=true", "-Dvertx.disableHttpHeadersValidation=true", "-Dio.netty.buffer.checkBounds=false", "-Dio.netty.buffer.checkAccessible=false", "-jar", "target/vertx.benchmark-0.0.1-SNAPSHOT-fat.jar", "src/main/conf/config.json"] |
50
afeiche 7 小时 26 分钟前
vert.x 性能是真可以,不过异步写法有时候定位问题比较麻烦,不知道后续上了虚拟线程后会不会有改善,另外好奇虚拟线程能不能把 java 的其他框架性能拉上来
|
52
roundgis 7 小时 4 分钟前 via Android
@wryyyyyyyyyyyy 夠用了
|
![]() |
53
bronyakaka OP @Al0rid4l gin 这种性能又低、差不多裸写 http ,用的人还不少的框架如何评价
![]() |
54
wryyyyyyyyyyyy 6 小时 54 分钟前
|
![]() |
56
encro 6 小时 48 分钟前
|
![]() |
58
rick2c 6 小时 27 分钟前
有大佬用 just-js 么
|
![]() |
59
Felldeadbird 6 小时 25 分钟前
啊!~GIN 竟然这么靠后。
|
![]() |
60
wweerrgtc 6 小时 4 分钟前
java8+spring2.x.x 的性能排第几名🐶
|
![]() |
61
xausky 5 小时 42 分钟前
第一个非 pg 的排名是 114 名,我严重怀疑 gin vs spring 的测试里面 mysql 拉了大胯
|
![]() |
62
yangxiaopeipei 5 小时 42 分钟前
我来看看有哪些比 laravel 更慢的
|
![]() |
63
sagaxu 5 小时 35 分钟前
@afeiche vertx 虚拟线程支持的还不太好,而且要到 Java 24 才能解决 synchronized 不能释放线程的问题。拿虚拟线程跑 worker 倒挺好的,偶尔 pin 住线程影响也不大。现阶段 vertx + kotlin coroutine 很方便,大部分场景是很不错的。除了文件系统 IO ,异步方式读 vfs cache 里的小文件,eventloop 和 worker 之间来回切换的开销(>10us)比阻塞读还大。
|
64
edwinxe2v 5 小时 20 分钟前
18 位的 mORMot 非常冷门 - 是 Pascal 语言的。
|
65
roundgis 4 小时 50 分钟前 via Android
@wryyyyyyyyyyyy 實在不行還可以用 pypy 可以快一倍。
|
![]() |
68
Al0rid4l 2 小时 58 分钟前
@bronyakaka 不了解 go 不好评价, 如果真是这样那只能鉴定为有点抽象了🤣
另外提醒前排, 榜单里 asp core 也差不多是个裸写 HTTP 服务器的, asp minimal 和 asp mvc 才是比较符合实际情况的 实际上这个榜单的**主流框架**里除了少数几个能每项都有第一的 7-80%, 可能大部分框架能到第一 50%的都算得上是高性能了, 2-30%都算还可以, 所以也不用觉得某些框架性能很垃圾 |
![]() |
69
coyove 2 小时 34 分钟前
想起了在创业公司手撸的 go+epoll http/redis server 库,github.com/coyove/resh ,性能比 fasthttp 好得多
但意义不大,再好的库 benchmark 时拉开的差距,在叠加实际业务后都没有任何意义,除非你的业务本质就是 lb ,proxy ,sfu/mcu 这类的 |
70
Martin123123 2 小时 29 分钟前
正常来说,只需要在高级语言中选择自己熟悉并且最多人用的一种语言的框架就可以了,没必要为了速度专门切技术栈,最简单的例子就是 python ,只要语言足够热门,总会有造轮子的人去考虑性能,大部分 benchmark 场景下的性能没有意义
|
![]() |
71
Immortal 1 小时 48 分钟前
@bronyakaka #53
这是有历史原因,最早的 http 标准库和现在区别还是很大的,很多方便的 web 方法都是没有的,尤其是路由那块. 同期的 web 框架选择不多,只有 beego/martini/gin/echo 这一类.gin 在这几个里算很简单轻量,所以选择的人多.你说用的人不少就是这个原因. 你说的性能低应该是相对而言,几乎没听说过哪个项目用了 gin 是框架导致的性能瓶颈 |