Node.js API返回响应对象两种写法性能对比及最佳实践
Node.js 接口响应两种写法的对比说明
性能差异结论
两种写法不存在值得关注的性能差异,实际业务中完全感知不到区别。
第一种写法只实例化1次响应对象,后续通过修改属性赋值;第二种写法根据命中分支实例化1次响应对象。两者的执行开销差在V8引擎的优化下仅为纳秒级,哪怕是十万级QPS的高负载接口,这点差异也不会对服务响应速度、资源占用造成任何可观测的影响,完全没必要从性能角度做选择。
注:你提供的示例代码有一处命名笔误:定义的响应类名为
Response,但handleResponse方法里返回的是new HandlerResponse(),实际运行会直接抛引用错误,需要把两处类名统一。
规范选择建议
优先选第二种直接在分支内传参调用handleResponse返回结果的写法,可维护性好很多,原因很直接:
- 可读性更高:每个分支的返回状态、错误信息都写在return语句里,后续读代码、排查问题的时候,不用顺着变量追对象的属性修改过程,扫一眼就知道对应分支会返回什么内容
- 没有无效操作:第一种写法默认先创建一个200状态、空错误、空data的响应对象,再进分支覆盖核心属性,属于纯多余的初始化。如果后续给
Response类加构造函数校验、埋点日志、默认字段赋值之类的逻辑,这种先创建再改属性的写法很容易跑出意料之外的结果 - 不容易出bug:第一种写法如果后续分支加的多,很容易出现某个分支漏改属性、改完属性忘return的问题,比如加新分支的时候忘了改状态码就返回,会错误返回默认的200状态,这类问题藏的很深,排查起来很麻烦。
如果遇到多个分支有大量公共返回字段、只有个别字段不同的场景,也不建议用先实例化再改属性的写法,把公共字段抽成公共变量,调用handleResponse的时候直接传合并后的参数就行。
内容的提问来源于stack exchange,提问作者Juan Ignacio Dominguez
相关产品推荐
相关产品推荐

