异步组件加载失败需自动重试而非仅依赖手动刷新:路由层用带重试的动态导入,defineasynccomponent 封装支持手动重试,suspense 实现加载/错误/重试闭环,生产环境辅以构建优化与 cdn 缓存。

网络慢时异步组件加载失败,不能只靠用户手动刷新——得让应用自己“试一次、再试一次、最后给反馈”。核心思路是:在加载链路的关键节点主动注入重试逻辑,同时避免无限循环和体验断层。
路由配置层加带重试的动态导入
这是最常用也最可控的方式。把 import() 包裹进一个可重试的 Promise 工厂函数,配合明确的重试次数和间隔:
- 定义重试函数,例如 loadWithRetry,接收路径、最大重试次数(建议 2~3 次)、延迟毫秒(如 800ms)
- 每次失败后用 setTimeout 延迟重试,避免瞬间密集请求加重网络负担
- 最终 reject 时返回统一错误组件,确保兜底渲染不白屏
- 示例写法:const UserPage = () => loadWithRetry(() => import('@/views/User.vue'), 3, 800)
用 defineAsyncComponent 封装并支持手动重试
适合需要用户触发恢复的场景,比如 fallback 界面里放个「重试」按钮:

