1.8 KiB
1.8 KiB
Retry Image Component Lessons
背景
图片生成任务完成后,远端文件或本地虚拟缓存路径可能短时间不可读,直接使用 <img> 会出现一次性加载失败的破图。任务队列已有 RetryImage,但其他生成图展示入口仍散落使用原生 <img> 或 CSS background-image。
经验
- 生成结果图统一使用公共
RetryImage,不要在各页面重复写onError重试。 RetryImage的失败通知应在重试耗尽后触发,避免外层第一次onError就切到失败占位。- 列表、缩略图、画廊等紧凑 UI 默认关闭 skeleton,直接保持原
<img>布局,避免额外 wrapper 撑乱尺寸。 - 需要
ref/onLoad的媒体预览主图,可以通过forwardRef接入RetryImage,保留自适应缩放逻辑。 - CSS
background-image不会触发组件重试,生成锚点这类背景预览要改成真实图片节点。 - 素材库类长列表仍应保留懒加载;可在
LazyImage进入视口后下沉复用RetryImage,兼顾性能和容错。 - 视频封面已有
VideoPosterPreview专用重试逻辑,不必强行替换。 - 用户上传预览、本地帧图、品牌图标、画布内部图片元素不属于“生成后短时间不可读”的主风险面,除非出现实际问题,不应扩大替换范围。
替换优先级
- 任务结果缩略图、批量生图预览、生成历史。
- 工作流首尾帧、角色参考图、漫画/PPT/Markdown 生成图。
- 媒体预览主图和缩略图队列。
- 素材库和提示词历史中的生成图复用入口。
验证建议
- 跑
pnpm nx run drawnix:typecheck。 - 跑图片任务重试相关测试。
- 检查紧凑缩略图容器是否因 wrapper 发生尺寸变化。
- 搜索剩余
<img>时按来源判断,不要机械替换所有图片节点。