这是什么意思??? 当我使用strongloop控制器API时,Vanilla Node.js I / O阻塞会清除吗?

早些时候,我问了一个关于在node.js中导致特定延迟的问题: 在Node中执行HTTPS与HTTP get请求相比,延迟150ms

不满意我收到的一些答案,我决定尝试自己弄清楚。 我遇到了StrongLoop api服务器,并决定尝试一下。 结果是它修复了延迟! 但是我不知道为什么和怎么回事! 我想知道什么可能导致这个香草节点的阻塞,为什么运行strongloop修复它。

这是我的testing代码:

var https = require('https'); var http = require('http') console.time("Stage1"); console.time("Stage2"); console.time("Response"); console.time("End"); var options = { hostname: 'www.google.com', method: 'GET' } function request() { console.timeEnd("Stage1"); var req = https.request(options, function(res) { res.on('data', function (chunk) { buffer =+ chunk; }); res.on('end', function () { console.timeEnd("End"); }); }).on('response', function () { console.timeEnd("Response"); }); console.timeEnd("Stage2"); req.end(); } request(); 

当我用vanilla node.js运行它时,看起来像这样:

 C:\Users\Jonathan\Desktop>node test Stage1: 0ms Stage2: 148ms Response: 425ms End: 537ms 

这就是它在SLC中运行的样子:

 C:\Users\Jonathan\Desktop>slc run test INFO strong-agent not profiling, StrongOps configuration not found. Generate configuration with: npm install -g strongloop slc strongops See http://docs.strongloop.com/strong-agent for more information. supervisor running without clustering (unsupervised) Stage1: 0ms Stage2: 10ms Response: 274ms End: 387ms 

到底是怎么回事??? 为什么香草节点需要额外的100多ms来执行https.response()函数? 什么是造成这种堵塞?

PS。 我有点确信它在node.js内核中,因为进程监视器显示没有文件或networking读取导致这个显着的延迟。

编辑:附加信息:是的,我正在使用最新版本的节点,我已经跑了这个代码几十次,在本地机器和在线VPS上都有类似的结果。

我强烈怀疑测量错误。 你打了一个电话给谷歌。 需要多长时间会有很大的变化。 我build议在循环中运行几十到几百次,以获得更好的变化感。

我的代码运行(在Linux上):

sam@samtu:/tmp % node _.js Stage1: 0ms Stage2: 29ms Response: 290ms End: 293ms sam@samtu:/tmp % slc run _.js INFO strong-agent not profiling, StrongOps configuration not found. supervisor running without clustering (unsupervised) Stage1: 0ms Stage2: 11ms Response: 299ms End: 301ms

顺便说一句,我想你的意思是“缓冲+ =大块” (但是你没有在任何地方定义缓冲区)。

为了logging,我们(我是slc作者之一)没有定制的节点构build,我们只是运行节点。 此外,运行的唯一sls crun代码足以发现您不想要集群,并且没有strongloop.json文件,所以我们不会集群,也不会加载我们的编译插件…所以我们什么都不做,只是开始你的应用程序。 这听起来像是你的系统有问题,但是你没有描述节点版本或系统,或者你如何安装节点,或者你在什么系统上进行修复。 它显然不是一种普遍的问题(你可以看到我的上面运行,节点0.10.32,Ubuntu 14.10)。

我build议与slc的关系是虚幻的。 如果您的testing文件是test.js,请尝试在相同的目录中运行此文件:

 require('module')._load( require('path').resolve('test.js'), null, true); 

这是什么有效的SLC运行。