13

在 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 毫秒。显然很多时间都浪费在了盒子上。我确保在测试之前缓存了 DNS。

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

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

有没有我想念的地方?

4

2 回答 2

15

虽然 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 请求)(您是否在服务器上运行它?什么并发?)

于 2013-03-15T09:35:02.290 回答
13

我绝对讨厌回答自己的问题,但我想将我的发现与未来的读者分享。

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

我刚刚通过了一系列测试。我设置了多种类型的节点服务器,并混合了 PHP 和 Nginx 之类的东西。这是我的发现。

如前所述,使用上面包含的代码段,我每请求丢失了大约 250 毫秒,但 Apache 基准测试并没有复制这些问题。然后我开始进行 PHP 测试,结果在 2 毫秒到 20 毫秒之间通过 ping... 有很大的不同。

这引发了更多的研究,我启动了一个 Nginx 服务器并通过它代理节点,不知何故,这神奇地将响应从 250 毫秒更改为 15 毫秒。我与那个 PHP 脚本相当,但这是一个非常令人困惑的结果。通常额外的跳跃会减慢速度。

很感兴趣,我也做了一个 express.js 服务器——更有趣的事情发生了,ping 本身就超过了 2 毫秒。我在源代码中挖掘了很长时间,发现它缺少res.write()命令,而是直接进入res.end(). 我启动了另一台服务器,从中删除了“Hello World”,res.write并将其添加到了res.end,令人惊讶的是,ping 比 ping 慢了 0 毫秒。

我对此进行了一些搜索,想看看这是否是一个众所周知的问题,并遇到了这个 SO question,他遇到了完全相同的问题。nodejs响应速度和nginx

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

祝大家好运!

于 2013-03-22T06:47:29.547 回答