Node.JS响应时间

Jon*_*han 13 performance amazon-web-services node.js

在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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

我错过了什么地方?

And*_*rov 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);
Run Code Online (Sandbox Code Playgroud)

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

  • 更有趣的数字,在同一个盒子上测试Apache/PHP,我的响应时间为92毫秒(两次ping).虽然我仍然在NodeJS脚本上获得大约350毫秒.我觉得我错过了一些东西...... (2认同)

Jon*_*han 12

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

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

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

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

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

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

我做了一些搜索,想知道这是一个众所周知的问题,并遇到了这个问题,谁有完全相同的问题.nodejs响应速度和nginx

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

祝大家好运!