将无内部异步任务的同步函数改写为async函数是否会带来性能损耗?
关于同步方法改async方法的性能影响解答
改写前后代码对比
原代码
engine.js中方法定义:
getDefaultNodes(){ return this.defaultNodes; }
调用处代码:
const defaultNodes = engine.getDefaultNodes();
改写后代码
engine.js中方法定义:
async getDefaultNodes(){ return this.defaultNodes; }
调用处代码:
const defaultNodes = await engine.getDefaultNodes();
性能影响结论
- 该改写会产生极轻微的性能开销,但常规业务场景下完全不会造成可感知的性能问题。
- 单次调用的额外开销仅为纳秒级,只有当该方法被高频调用(如每秒调用数十万次以上)时,才有可能出现可测量的性能损耗。
开销产生原因
- async函数会自动将返回值包装为Promise对象,即使返回同步值也会多一步包装操作。
- await处理已完成状态的Promise时,会将后续逻辑推入微任务队列调度执行,比同步调用多一次微任务调度步骤。
额外注意事项
相比性能影响,更需要注意逻辑兼容问题:如果存在其他未改造的调用点,原来直接获取返回值的逻辑会变成拿到Promise对象,大概率会引发业务逻辑错误,改造前需要全量排查所有调用位置。
内容的提问来源于stack exchange,提问作者ibrahim koz
相关产品推荐
相关产品推荐

