async/await 不加快单个请求网络耗时,但通过减少微任务调度开销、推动合理并发、统一错误处理、支持非阻塞副作用,显著提升响应性、稳定性、可维护性与吞吐效率。

async/await 本身不加快单个请求的网络耗时,但它通过优化代码结构、调度机制和开发者行为,显著提升异步执行的质量——包括响应性、稳定性、可维护性与整体吞吐效率。
减少微任务调度开销,降低事件循环压力
Promise 链中每写一个 .then(),V8 就会创建一个新微任务,多次嵌套导致调度队列变长、事件循环中断频繁。而 async/await 编译为单个状态机,所有 await 共享同一 Promise 生命周期,避免重复入队。
- 5 层 Promise 链比等效 async/await 多产生约 30% 微任务调度开销
- 更少的调度中断意味着主线程更早空闲,UI 响应更及时
- 尤其在高频交互或动画场景中,这种底层轻量优势更明显
推动合理并发,让并行成为默认习惯
串行 await 是语法“看起来自然”的陷阱;而 async/await 的线性写法反而让人更容易识别哪些操作彼此独立,从而主动改用 Promise.all() 或 Promise.allSettled()。
- 10 个独立接口:串行耗时 1.2s → 并行仅需 0.15s(性能提升约 8×)
- 容错需求下可用
Promise.allSettled()获取全部结果,不因单个失败中断流程 - 混合模式也清晰:先
await getToken(),再const [a, b] = await Promise.all([fetchA(), fetchB()])
统一错误处理路径,增强运行时健壮性
不再需要在每个 .catch() 里分散处理逻辑,也不依赖全局 rejection 监听器。try/catch 覆盖整个异步流程,异常位置明确、捕获边界清晰。
- 任意一步出错(网络失败、JSON 解析异常、业务校验抛错)都进入同一个 catch 块
- 可配合 finally 做资源清理:关闭 loading、释放锁、重置状态
- 避免因遗漏 .catch 导致未捕获 promise rejection,防止静默失败
支持非阻塞副作用,提升关键路径响应速度
await 只暂停当前函数执行,并不冻结整个程序。那些无需等待结果就能发起的操作,完全可以提前启动。
- 先发起请求:
const userPromise = fetchUser(),再更新 UI 状态 - 埋点、日志、缓存写入等非关键操作,可不 await,避免拖慢主流程
- 对耗时但容错的操作(如本地存储),用 fire-and-forget 方式释放主线程











