【发布时间】:2017-10-10 18:46:52
【问题描述】:
我正在对用node.js 和asp.net-core 编写的两个(有点)hello world 项目进行快速压力测试。它们都在生产模式下运行,并且没有附加记录器。结果是惊人的!即使在做了一些额外的工作之后,ASP.NET 核心的性能也优于 node.js 应用程序,而 node.js 应用程序只是呈现一个视图。
应用程序 1:http://localhost:3000/nodejs node.js
使用:node.js、express和vash渲染引擎。
这个端点中的代码是
router.get('/', function(req, res, next) {
var vm = {
title: 'Express',
time: new Date()
}
res.render('index', vm);
});
如您所见,除了通过time 变量将当前日期发送到视图之外,它什么都不做。
应用 2:http://localhost:5000/aspnet-core asp.net core
使用:ASP.NET Core,默认模板定位dnxcore50
然而,这个应用程序所做的不仅仅是渲染一个带有日期的页面。它生成 5 段各种随机文本。从理论上讲,这应该比 nodejs 应用程序更重一些。
这是呈现此页面的操作方法
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
[Route("aspnet-core")]
public IActionResult Index()
{
var sb = new StringBuilder(1024);
GenerateParagraphs(5, sb);
ViewData["Message"] = sb.ToString();
return View();
}
压力测试结果
Node.js App压力测试结果
更新:Following suggestion by Gorgi Kosev
使用npm install -g recluster-cli && NODE_ENV=production recluster-cli app.js 8
ASP.NET Core App压力测试结果
不敢相信我的眼睛!在这个基本测试中,asp.net core 比 nodejs 快得多,这不是真的。当然,这不是用于衡量这两种 Web 技术之间性能的唯一指标,但我想知道 我在 node.js 方面做错了什么?。
作为一名专业的 asp.net 开发人员并希望在个人项目中使用 node.js,这有点让我望而却步——因为我对性能有点偏执。我认为 node.js 比 asp.net core 更快(一般来说 - 正如在其他各种基准测试中看到的那样)我只是想向自己证明一下(鼓励自己适应 node.js)。
如果您希望我包含更多代码 sn-ps,请在评论中回复。
更新: .NET Core 应用的时间分布
服务器响应
HTTP/1.1 200 OK
Cache-Control: no-store,no-cache
Date: Fri, 12 May 2017 07:46:56 GMT
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Server: Kestrel
【问题讨论】:
-
“我一直认为 node.js 比 asp.net core 快” - 我很好奇你为什么这么认为?我还没有看到任何支持这一点的基准(我听说采用 node.js 的主要原因是“易于使用”和“更快的开发/迭代时间”)
-
@UnholySheep 这都是我听到的,我也听说它“易于使用”和“开发速度更快”,通常来自人们从未在 ASP.NET 中工作过,尤其是在 VisualStudio 中。我不是在吹嘘任何技术——但这是我注意到的模式。
-
这里的问题是什么?如果它是合理的:是的。 techempower.com/benchmarks/… .... 还要更新你的工具链 Dnxcore50 已经过时了至少一两年。
-
@Tony 使用集群模块 NodeJs 产生多个工作人员,并分担正在侦听单个进程的主进程的负载。它只是避免了在不同的端口上设置多个应用程序。此外,如果 nodeJs 在集群模式下运行,那么应该有相同数量的 Asp.Net WebApplications 在 IIS 上运行在不同的端口上,并通过一些负载均衡器在它们之间共享负载,那么这将是正确的比较。
-
Node.js 非常适合做很多事情,但每个请求的原始速度并不是其中之一。它擅长的是作为 I/O 操作的代理,因为非阻塞事件循环的东西,当 Node 是新的和闪亮的时候,这是一件大事。当然,从那时起,其他语言和框架也赶上了,所以在 .NET 中,我们有了任务并行库和异步 I/O 和 async/await。 Node 不擅长的是页面渲染等 CPU 密集型操作,因为它是单线程 JavaScript。
标签: node.js asp.net-core c# node.js performance asp.net-core stress-testing