Node.JS响应时间

时间:2013-03-14 23:57:06

标签: performance node.js amazon-web-services

在AWS实例上抛出Node.JS并测试请求时间,得到了一些有趣的结果。

我在服务器上使用了以下内容:

var http = require('http');

http.createServer(function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('Hello World');
  res.end();
}).listen(8080);

此服务器平均延迟90毫秒,但总请求大约需要350 + ms。显然,很多时间浪费在盒子上。我确保在测试之前缓存了DNS。

我在服务器上做了一个apocurrency为1000的Apache工作台 - 它在4.3秒内完成了10,000个请求...这意味着平均4.3毫秒。

更新:只是为了笑容,我在同一台机器上安装了Apache + PHP并做了一个简单的“Hello World”回音,平均响应时间为92毫秒(两次超过ping)。

我缺少某个地方吗?

2 个答案:

答案 0 :(得分:14)

虽然Chrome开发者工具是研究前端性能的好方法,但它可以让您粗略估计实际的服务器时序/ CPU负载。如果您在开发工具中有大约350毫秒的总请求时间,请从此数字中减去DNS查找+正在连接+发送+接收,然后减去往返时间(90毫秒?),之后您将进行初步估算。在您的情况下,我希望实际请求时间为亚毫秒。尝试在服务器上运行此代码:

var http = require('http');
function hrdiff(t1, t2) {
    var s = t2[0] - t1[0];
    var mms = t2[1] - t1[1];
    return s*1e9 + mms;
}
http.createServer(function(req, res) {
  var t1 = process.hrtime();
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('Hello World');
  res.end();
  var t2 = process.hrtime();
  console.log(hrdiff(t1, t2));
}).listen(8080);

基于ab结果,您应该估计平均发送+请求+接收时间最多为4.2毫秒(4200毫秒/ 10000请求)(您是否在服务器上运行它?什么是并发?)

答案 1 :(得分:12)

我绝对不喜欢回答我自己的问题,但我希望将我发现的内容传递给未来的读者。

tl; dr:res.write()有问题。使用express.js或res.end()

我刚开始进行一系列测试。我设置了多种类型的Node服务器,并混合了PHP和Nginx之类的东西。以下是我的发现。

如前所述,使用上面包含的代码片段,我失去了大约250毫秒/请求,但Apache基准测试没有复制这些问题。然后我继续进行PHP测试,得​​到的结果是2ms - 20ms超过ping ...差别很大。

这引发了一些更多的研究,我启动了一个Nginx服务器并通过它代理节点,不知何故,神奇地将响应从250ms改为15ms。我与那个PHP脚本相提并论,但这确实令人困惑。通常额外的啤酒花会降低速度。

好奇,我也创建了一个express.js服务器 - 更有趣的事情发生了,ping本身就是2ms。我在源头挖了好一阵子,注意到它没有res.write()命令,而是直接进入res.end()。我启动了另一台服务器,从res.write删除了“Hello World”并将其添加到res.end,令人惊讶的是,ping超过了ping 0ms。

我对此做了一些搜索,想看看它是否是一个众所周知的问题并遇到了这个问题,谁有完全相同的问题。 nodejs response speed and nginx

总的来说,有趣的东西。确保优化您的回复并立即发送。

祝大家好运!