我刚刚在一个简单的嵌套控制器上测试了性能,它在获取请求(无数据库)时返回文本。与 express 相同的简单 GET 控制器(中间件)。
我使用 WRK 工具来测试性能。
因此,plain express 比 nestjs 快 2 倍。为什么nestjs会产生这么多开销?
我刚刚在一个简单的嵌套控制器上测试了性能,它在获取请求(无数据库)时返回文本。与 express 相同的简单 GET 控制器(中间件)。
我使用 WRK 工具来测试性能。
因此,plain express 比 nestjs 快 2 倍。为什么nestjs会产生这么多开销?
更新 - 17.03.2020
我们现在正在为每个新 PR 运行基准测试。可以在此处找到最新的基准测试之一:https ://github.com/nestjs/nest/runs/482105333
Req/sec Trans/sec
Nest-Express 15370 3.17MB
Nest-Fastify 30001 4.38MB
Express 17208 3.53MB
Fastify 33578 4.87MB
这意味着 Nest +FastifyAdapter
现在的速度几乎是express的2 倍。
更新 - 22.09.2018
基准目录已添加到存储库:https ://github.com/nestjs/nest/blob/master/benchmarks/all_output.txt (您也可以在您的机器上运行基准测试)。
更新 - 24.06.2018
Nestv5.0.0
支持fastify。Fastify + Nest 集成比 plain(!) express 更高效。
以下列表显示了 Nest 与普通快速路由处理程序相比所做的事情:
async
body-parser
中间件(两者json
和扩展urlencoded
)所有提到的事情都反映了一个真实的例子(可能 99.9% 的快速应用程序也必须这样做,这是不可避免的)。这意味着如果你想比较 Express 和 Nest 的性能,你至少应该涵盖以上几点。与以下示例的比较:
app.get('/', (req, res, next) => res.status(200).send('Hello world'));
在这种情况下是不公平的,因为这还不够。当我谈到这些要点时,这就是我收到的(表达 4.16.2):
Running 10s test @ http://localhost:3000
1024 connections
Stat Avg Stdev Max
Latency (ms) 225.67 109.97 762
Req/Sec 4560 1034.78 5335
Bytes/Sec 990 kB 226 kB 1.18 MB
46k requests in 10s, 9.8 MB read
此外,Nest 必须:
send()
或json()
(+1 条件)if
语句)来检查管道、拦截器和守卫Nest(4.5.8)有一个输出:
Running 10s test @ http://localhost:3000
1024 connections
Stat Avg Stdev Max
Latency (ms) 297.79 55.5 593
Req/Sec 3433.2 367.84 3649
Bytes/Sec 740 kB 81.9 kB 819 kB
34k requests in 10s, 7.41 MB read
这意味着 Nest 的表现在 79% 左右(-21%)。这是由于上述原因,此外,因为 Nest 与 Node 6.11.x 兼容,这意味着它不能在后台使用 async/await - 它必须使用生成器。
根据这些统计数据得出哪个结论?None,因为我们不习惯创建只返回纯字符串而没有任何异步内容的应用程序。与的比较Hello world
没有任何意义,这只是一个花絮:)
PS。我使用autocannon
了库https://github.com/mcollina/autocannon
autocannon -c 1024 -t30 http://localhost:3000