Garfish 的错误处理和降级机制确保微前端应用在出现异常时能够优雅降级,提供良好的用户体验。
错误处理机制
1. 子应用加载错误
- 错误类型:网络错误、资源加载失败、脚本执行错误
- 处理策略:
- 自动重试机制
- 提供错误提示
- 加载备用版本
- 配置示例:
javascript{ name: 'app1', entry: '//localhost:3001', errorBoundary: { onError: (error) => { console.error('子应用加载失败:', error); // 上报错误日志 reportError(error); }, fallback: () => { // 显示降级页面 return <ErrorPage message="应用加载失败,请稍后重试" />; } } }
2. 运行时错误
- 错误类型:JavaScript 运行时错误、组件渲染错误
- 处理策略:
- 使用错误边界捕获
- 隔离错误影响范围
- 提供错误恢复机制
- 示例:
javascript// React 错误边界 class ErrorBoundary extends React.Component { componentDidCatch(error, errorInfo) { // 捕获子应用错误 Garfish.emit('app-error', { error, errorInfo }); } render() { if (this.state.hasError) { return <ErrorFallback />; } return this.props.children; } }
3. 生命周期错误
- 错误类型:bootstrap、mount、unmount 执行失败
- 处理策略:
- 捕获生命周期函数错误
- 确保资源正确清理
- 提供错误回调
- 示例:
javascriptexport async function mount(container) { try { ReactDOM.render(<App />, container); } catch (error) { // 清理已渲染的内容 container.innerHTML = ''; throw error; } }
降级策略
1. 应用级降级
- 策略:当子应用加载失败时,显示降级页面
- 实现方式:
- 配置 fallback 组件
- 显示静态内容
- 提供重试按钮
- 示例:
javascript{ name: 'app1', entry: '//localhost:3001', fallback: { component: () => ( <div className="fallback"> <h3>应用暂时不可用</h3> <button onClick={() => window.location.reload()}> 重新加载 </button> </div> ) } }
2. 功能级降级
- 策略:当部分功能失败时,降级到简化版本
- 实现方式:
- 检测功能可用性
- 提供替代方案
- 逐步恢复功能
- 示例:
javascript// 检测 API 可用性 async function checkApiAvailability() { try { await fetch('/api/health'); return true; } catch { return false; } } // 根据可用性选择实现 const Component = apiAvailable ? FullFeature : SimplifiedFeature;
3. 性能降级
- 策略:在性能不足时降低功能复杂度
- 实现方式:
- 禁用动画效果
- 减少数据加载量
- 使用简化版组件
- 示例:
javascript// 检测设备性能 const isLowPerformance = /low-performance/.test(navigator.userAgent); // 根据性能选择组件 const AnimationComponent = isLowPerformance ? SimpleAnimation : FullAnimation;
错误监控与日志
1. 错误收集
- 收集所有子应用的错误信息
- 记录错误上下文
- 统一错误格式
2. 错误上报
- 实时上报错误到监控系统
- 批量上报减少网络请求
- 支持离线缓存
3. 错误分析
- 统计错误频率和类型
- 分析错误影响范围
- 生成错误报告
最佳实践
1. 错误预防
- 完善的单元测试和集成测试
- 代码审查和质量检查
- 预发布环境验证
2. 错误恢复
- 提供自动重试机制
- 实现手动恢复选项
- 保存用户状态避免数据丢失
3. 用户体验
- 友好的错误提示
- 清晰的错误说明
- 提供解决方案建议
4. 监控告警
- 设置错误阈值告警
- 实时监控错误率
- 快速响应严重错误
通过完善的错误处理和降级机制,可以确保微前端应用的稳定性和可靠性。