Nestjs VS明码快递性能 [英] nestjs vs plain express performance

查看:69
本文介绍了Nestjs VS明码快递性能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚在一个简单的Nest控制器上测试了性能,该控制器返回GET请求的文本(没有数据库)。 和EXPRESS相同的简单GET控制器(中间件)。

我使用WRK工具测试性能。

结果是,普通快递比nestjs快2倍。 为什么由nestjs产生如此多的开销?

推荐答案

更新-2020年3月17日

我们现在正在为每个新的公关运行基准。可在此处找到最新的基准之一: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集成的性能甚至比普通(!)快递。


下面的列表显示了Nest与普通快递路由处理程序相比所做的工作:

  • 它用try..catch块包围您的路由处理程序主体
  • 它使每个路由处理程序async
  • 它创建一个全局快速路由器
  • 它为每个控制器创建单独的路由器
  • 绑定错误处理中间件
  • 绑定body-parser中间件(包括json和扩展的urlencoded)

所有提到的事情都反映了一个现实世界示例(可能99.9%的Express应用程序也必须这样做,这是不可避免的)。这意味着如果您想比较Express和Nest的性能,您至少应该涵盖以上几点。与下面示例的比较:

app.get('/', (req, res, next) => res.status(200).send('Hello world'));

在这种情况下是不公平的,因为这是不够的。当我谈到这些问题时,我收到的是(EXPRESS 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条件)
  • 添加3个条件(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%的EXPRESS(-21%)。这是由于上述原因,而且因为Nest与Node 6.11.x兼容,这意味着它不能在幕后使用异步/等待-它必须使用生成器。

根据这些统计数据得出什么结论?,因为我们不习惯创建只返回普通字符串而不返回任何异步内容的应用程序。与Hello world的比较没有任何意义,只是花边新闻:)

PS。我使用了autocannonhttps://github.com/mcollina/autocannon

autocannon -c 1024 -t30 http://localhost:3000

这篇关于Nestjs VS明码快递性能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆