我正在使用NodeJS构建ExpressJS应用程序。我的问题是,如果我这样做有任何性能差异
app.get('/test', function(req, res) {
fn(function(err, data) {
if (err) {
return res.json(400, {
error: 1,
msg: "some error"
});
}
///more code
});
});
而不是
app.get('/test', function(req, res) {
fn(function(err, data) {
if (err) {
res.json(400, {
error: 1,
msg: "some error"
});
return;
}
///more code
});
});
返回res
变量使服务器上的任何额外负载。这两个代码都有效,只有第一个看起来更好,我省了1行。
答案 0 :(得分:8)
相反,我认为很多人会告诉你这种成语是一种非常合理的练习,因为它向读者(通常是你未来的自我)表明你正在退出。在这种特殊情况下,策略的优点是你可以节省更多的代码,因为你现在在条件分支中只有一个语句,这意味着你可能会丢失一些大括号。
app.get('/test', function(req, res) {
fn(function(err, data) {
if (err) return res.json(400, {
error: 1,
msg: "some error"
});
///more code
});
});
但你问是否存在性能差异。如果有,我认为这几乎是不可察觉的。
答案 1 :(得分:0)
返回函数中的对象不会产生额外负载。
答案 2 :(得分:0)
在你的例子中,基于回调函数,没有区别。 但是如果app.get返回Promise会怎么样?
此代码将提供未处理的拒绝错误
app.get('/test')
.then( (data) =>
{ /* do something with your data that can throw a functional error
for exemple request for a user on your database based on your data */
if (!user) res.json(401, {msg: 'USER NOT FOUND'});
if (user.someProperty) //will throw an error when user is not found
res.json(200, {msg: 'USER DID IT'});
})
.catch( (err) => {
res.json(500, {msg: 'OUTCH'});
throw(err);
});
此代码不会
app.get('/test')
.then( (data) =>
{ /* do something with your data that can throw a functional error
for exemple request for a user on your database based on your data */
if (!user) return res.json(401, {msg: 'USER NOT FOUND'});
if (user.someProperty) //will not be evaluate when user is not found
return res.json(200, {msg: 'USER DID IT'});
})
.catch( (err) => {
res.json(500, {msg: 'OUTCH'});
throw(err);
});
使用promise时总是返回;)