2017-10-17 78 views
1

我正在用mysql开发一个快速应用程序。我的节点版本是6.11.2。做多回调减少nodejs性能?

我的路由器文件是

const router = require("express").Router(); 
const project = require("../../modules/project/"); 

// individual project routes 
router.get("/", project.getAllProject); 

现在我getAllProject功能代码如下所示。

/* Get all project */ 
    getAllProject(req, res, next) { 
    buildQuery(req) /* Build query based on logged in user */ 
     .then(query => runDbQuery(req, query)) /* execute query */ 
     .then(results => formatResult(results)) /* Build response for front end */ 
     .then(output => res.send(output)) /* return results */ 
     .catch(err => 
     next(err, req, res, next) 
    ); /* catch error and pass it error middle ware */ 
    } 

buildQuery,runDbQuery,fromatResult return promise。

在我的代码审查客户评论如下

在你的方法在这里被称为“getAllProjects”有 都需要作出并完成了数据交付前3次回调检查,并在总共4个回调所有。这太多了。这是缓慢的,因为这些 回调需要完成之前的数据可以被发送到占用了服务器的处理能力

他还问我要尽一个回调和数据返回到客户端,客户端。承诺和回调方法会降低性能。他还建议在快递中使用RXJS Observable。

+0

你必须指定更多的细节,比如这些函数做什么@shameersn – Sumeet

+0

@ Sumeet buildQuery返回sql查询字符串,runDbQuery执行mysql查询返回的buildQuery,formatResult从mysql结果创建一个json。这些函数根据一些条件来解析或拒绝,如果有一个mysql执行错误,那么它会拒绝错误,否则解析结果。我正在使用msql包执行mysql查询 – shameersn

+0

@Sumeet问题是关于单个vs多个'.then()'方式,而不是他们所做的工作 –

回答

-1

理论上,每个函数调用都会花费一些资源(如上下文/闭包构造)。所以,是的,有三个.then()根据定义慢于而不是单个.then(),即使在这两种情况下在这两种情况下完成相同的工作。

这实在是很难说多少多则情况相比,在不运行的基准单则情况更慢......所以,我创建了一个simple one,你可以尝试自己。

在我的旧真的sloooooooooow笔记本电脑,基准的结果看起来很喜欢这样的:

result

希望,这个回答你的问题。


现在,性能并不是代码评估的唯一标准。另一个是可读性。在某些情况下,如果您有多个.then()调用,其中每个都声明特定的数据转换步骤,那么您的代码将看起来更具可读性。只是一个侧面说明。 亲自宁愿可读性超过性能,因为对我来说它是挑选正确性高于性能。你的客户可能有不同的想法


只要Observable去,你可能会或可能不想使用它们。这取决于你的应用程序的性质。 Observable当涉及到事件流和操纵时。然而,摇滚与ES6的await/async功能。所以,在这里没有明确的答案,除非我们更了解上下文。

+0

谢谢。现在我必须牺牲可读性和客户满意度 – shameersn

+0

@shameersn不要生气。这是我们工作的一部分。无论如何,这是客户的电话。加上客户是谁支付... –

+0

亲爱的下来的选民,你会解释我的答案有什么问题吗? –