Node.js 为什么此连接代码运行几乎需要5秒钟?

Node.js 为什么此连接代码运行几乎需要5秒钟?,node.js,performance,mongodb,npm,Node.js,Performance,Mongodb,Npm,平均产量 var MongoClient = require('mongodb').MongoClient var perf = 0 , interval = setInterval(function(){ perf++; }, 0); var url = 'mongodb://localhost:27017/test'; MongoClient.connect(url, function(err, db) { console.log("Finished after", ( per

平均产量

var MongoClient = require('mongodb').MongoClient

var perf = 0
, interval = setInterval(function(){
  perf++;
}, 0);

var url = 'mongodb://localhost:27017/test';
MongoClient.connect(url, function(err, db) {

  console.log("Finished after", ( perf / 1000 ), "seconds" );
  clearInterval(interval);

});
为什么这么慢?如何识别瓶颈并解决此问题

在具有以下版本的OS X 10.9.5上运行:

Finished after 4.343 seconds

我不知道原因,但将mongodb:*更改为package.json中的特定版本,然后重新安装npm包,解决了问题,e。g:

Node v0.10.33
npm  1.4.28
MongoDB shell version: 2.4.6

这有点无关,但以这种方式使用setInterval效率很低。您应该只执行var start=Date.now;然后在连接回调中:console.log'Finished after',Date.now-start/1000',seconds';。实际上,@mscdex作为一个测试,我在我的机器上运行了setInterval版本和Date.now版本几十次,Date.now版本始终比setInterval版本慢4倍。setInterval的平均连接速度为.007秒,而Date.now为.031秒。不知道为什么,但你已经做到了。@subZero这与mongo cli的启动时间相比如何?@Paul setInterval的情况更快,因为没有要求回调每毫秒运行一次,因此它可以返回大于0的任何值。使用Date.now或process.hr time是测量时间的正确方法。@loganfsmyth,啊,明白了。我被mscdex使用的“低效”一词吓坏了,假设他的意思是它在消耗额外的资源。并不是说它更准确。谢谢你把它清理干净。
"mongodb": "^1.4.23",