load-timeout:微应用加载超时
触发原因
微应用配置了 loadTimeout,而加载阶段没有在时限内完成。
计时从应用取得容器的加载权限后开始,覆盖 beforeLoad、入口请求和 HTML 流、加载器需要等待的资源,以及入口生命周期的发现。排队等待前一个实例释放容器的时间不计入,bootstrap、mount、unmount 也不受该时限约束。
该错误的类型是 LoadAppTimeoutError,继承 QiankunError,另外提供 appName、loadTimeout 和 elapsed 三个只读字段。
排查步骤
- 对比错误中的
loadTimeout与elapsed,确认时限是否明显短于正常加载所需的时间。 - 在浏览器开发者工具的网络面板中查看入口 HTML 和阻塞资源,找出耗时最长或一直没有结束的请求。
- 检查入口 HTML 的响应是否会正常结束。启用超时后,qiankun 要等 HTML 流完整结束才进入挂载阶段,始终不关闭的流式响应必然超时。
- 检查
beforeLoad钩子里是否有耗时的异步任务。
解决办法
按实际网络状况和资源规模调整该应用的 loadTimeout;设为 0 可关闭超时。
超时发生时,qiankun 已经中止这次加载、清理了写入容器的节点和沙箱,并释放了容器。需要重试时,重新调用 loadMicroApp 创建新实例,不要继续挂载已经失败的句柄。超时无法中断正在执行的同步 JavaScript。
