我的问题与以下代码有关 -
情景1:
var queue = [];
var busy = false;
exports.getAProfile = function (params, cb) {
queue.push({params: params, cb: cb});
if (!busy) {
checkQueue(function (c, next) {
service.getAProfileNow(c.params, function (err, res) {
c.cb(err,res);
next();
});
});
}
}
function checkQueue(actualTask) {
var c = queue.shift();
if (c) {
busy = true;
actualTask(c, function () {
checkQueue(actualTask);
})
return queue.length;
} else {
busy = false;
return queue.length;
}
}
情景2:
var queue = [];
var busy = false;
var actualTask = function (c, next) {
service.getAProfileNow(c.params, function (err, res) {
c.cb(err,res);
next();
});
}
exports.getAProfile = function (params, cb) {
queue.push({params: params, cb: cb});
if (!busy) {
checkQueue();
}
}
function checkQueue() {
var c = queue.shift();
if (c) {
busy = true;
actualTask(c, function () {
checkQueue(actualTask);
})
return queue.length;
} else {
busy = false;
return queue.length;
}
}
两个代码的差异是 -
actualTask
(我猜)在第一个场景中定义了很多次,而在第二个场景中它只定义了一次。是'我的解释'是正确的吗?哪一个更好?为什么?代码的性能是否都不同?
注意:service
模块在代码中是require-d,它只查询数据库。
答案 0 :(得分:-1)
仅定义一次功能不会使性能或执行速度快。它只会减少代码的文件大小,并使代码形成得非常好。在这两种情况下,函数必须跳转到过程调用。