【发布时间】:2014-04-11 12:59:31
【问题描述】:
我有一个非常简单的 nodeJS 应用程序。由于某种原因,服务器的响应时间差异很大。
这是我的 app.js:
var express = require('express');
var http = require('http');
var path = require('path');
var Models = require('./schema/schema.js');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.static(path.join(__dirname, 'public')));
app.use(function(req, res, next) {
var start = Date.now();
res.on('header', function() {
var duration = Date.now() - start;
var time = Date.now() - req.start;
fs.appendFile("times.txt", time+"\n", function (err) {});
});
next();
});
app.use(app.router);
app.get("/tags", function(req, res) {
var query = Models.Tag.find({}).sort({'popularity': -1}).limit(200);
query.exec(function(err, tags) {
res.status(200);
res.send(tags);
});
}
数据总是正确返回,但这里是我的响应时间,由“标头”函数测量:
19
11
13
6
10
10
8
9
2
62449
57862
24919
9975
11
17
21116
10
3
2
2
13
大多数都小于 10 毫秒,但通常有一些超过一分钟。怎么回事?
架构:
var tagSchema = new mongoose.Schema({
name : {
type: String,
trim: true
},
popularity :{
type:Number, default:0
},
created_date: {
type:Date, default:Date.now
},
last_update: {
type:Date, default:Date.now
}
});
【问题讨论】:
-
你的模型中是否有流行度索引?
-
不,我想不是。这对性能有很大影响吗?
-
数据库在哪里?在您的计算机上?还是某些 saas 上的免费实例?
-
我不认为这是一致的行为,甚至可能无法重现。这看起来就像您在虚拟机上运行,实际上在您的实际硬件环境中发生了其他影响结果的事情。无法以其他方式解释包含 200 条记录的工作集。
-
我认为您需要收集更多信息,您现在所知道的只是有些东西很慢。检查 mongo 中是否有任何查询很慢:docs.mongodb.org/manual/tutorial/manage-the-database-profiler。但是我不得不同意@NeilLunn,您可能正在某种共享托管平台上运行,即使您认为自己不是。