我刚刚在一个简单的nest控制器上测试了性能,它在get请求(没有数据库)上返回文本.与快递相同的简单GET控制器(中间件).
我使用WRK工具来测试性能.
因此,plain express比nestjs快2倍.为什么nestjs会产生如此多的开销?
Kam*_*iec 92
更新 - 22.09.2018
Benchmarks目录已添加到存储库:https://github.com/nestjs/nest/blob/master/benchmarks/all_output.txt(您也可以在您的计算机上运行基准测试).
更新 - 24.06.2018
Nest v5.0.0支持fastify.Fastifie Nest整合比普通(!)表达更高效.
以下列表显示了Nest与普通快速路由处理程序相比正在做什么:
asyncbody-parser中间件(两者json和扩展urlencoded)所有提到的事情都反映了一个现实世界的例子(可能99.9%的快递应用程序也必须这样做,这是不可避免的).这意味着如果你想比较Express和Nest性能,你至少应该覆盖以上几点.与以下示例进行比较:
app.get('/', (req, res, next) => res.status(200).send('Hello world'));
Run Code Online (Sandbox Code Playgroud)
在这种情况下是不公平的,因为这还不够.当我覆盖这些要点时,这就是我收到的(表达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
Run Code Online (Sandbox Code Playgroud)
此外,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
Run Code Online (Sandbox Code Playgroud)
这意味着Nest的表现约为79%(-21%).这是由于上面提到的原因,而且,因为Nest与Node 6.11.x兼容,这意味着它不能在引擎盖下使用async/await - 它必须使用生成器.
根据这些统计数据得出哪个结论?没有,因为我们不习惯创建只返回普通字符串而没有任何异步内容的应用程序.比较Hello world没有任何意义,它只是一个标题:)
PS.我使用了autocannon库https://github.com/mcollina/autocannon
autocannon -c 1024 -t30 http://localhost:3000
| 归档时间: |
|
| 查看次数: |
13993 次 |
| 最近记录: |