为什么then回调中的循环执行速度比async/await异步函数中的更快?
性能差异原因
你遇到的耗时差不是async/await原生语法本身比Promise.then慢,核心是TS编译阶段引入的额外polyfill开销:
- 当你TS配置的
target编译目标低于ES2017(ES8)时,TS会把async/await语法转译为兼容低版本环境的代码,依赖regenerator-runtime这类polyfill实现异步逻辑。await操作会被包装成生成器的迭代调用,每次执行都要额外做上下文保存、状态判断、结果包装等操作,这些额外的运行时代码和你测试用的同步循环逻辑叠加,就放大了耗时。 - 你写的嵌套Promise.then代码不需要做兼容转译,直接调用原生Promise API,没有这层额外开销,所以耗时明显更短。
如果把TS的编译目标调整为ES2017及以上,在原生支持async/await的环境(Node.js 8+、主流现代浏览器)运行测试,两者的耗时会基本持平,不会出现数倍的差距。原生实现中await后的执行逻辑和Promise.then的回调逻辑执行路径完全对等,没有本质性能差异。
内容的提问来源于stack exchange,提问作者aggroot
相关产品推荐
相关产品推荐

