Node.JS响应时间

在AWS实例上抛出Node.JS并testing了请求次数,得到了一些有趣的结果。

我使用了以下服务器:

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毫秒。 很明显,在盒子上浪费了很多时间。 在testing之前,我确定DNS被caching了。

我在服务器上做了一个Apache平台,交换率为1000 – 它在4.3秒内完成了10,000个请求……这意味着平均4.3毫秒。

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

有没有一个设置我失踪的地方?

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

我绝对讨厌回答自己的问题,但我想把我发现的东西和未来的读者一起传递下去。

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

我刚刚通过一系列的testing。 我设置了多种types的节点服务器,并混合使用PHP和Nginx。 这是我的发现。

如前所述,通过上面包含的代码片段,我已经放弃了250ms /请求,但是Apache基准testing并没有重现这个问题。 然后我开始做一个PHPtesting,结果从2ms到20ms不等,这是一个很大的区别。

这提示了一些更多的研究,我开始了一个Nginx服务器,并通过它来代理节点,不知何故,通过ping奇迹般地将响应从250ms改变为15ms。 我和那个PHP脚本是一致的,但是这是一个令人困惑的结果。 通常额外的啤酒花会减慢速度。

有趣的是,我也做了一个express.js服务器 – 而且更有趣的事情发生了,ping自己也是2ms了。 我在源代码中search了很长一段时间,注意到它缺lessres.write()命令,而是直接到了res.end() 。 我开始另一个服务器从res.write删除“Hello World”,并将其添加到res.end ,令人惊讶的是,ping在ping上是0ms。

我在这方面做了一些研究,想看看是否是一个众所周知的问题,并且遇到了这个SO问题,谁有完全相同的问题。 nodejs响应速度和nginx

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

祝大家好运!