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",