2.8 KiB
2.8 KiB
Luckysheet 全屏首次加载异常(问题清单与修复 Checklist)
现象(用户反馈)
- 全屏打开在线表格时,前 1~2 次渲染不完整:Luckysheet 工具栏/公式栏缺失或布局异常;刷新后再打开才恢复正常。
- DevTools 的 Sources/页面树里看不到预期的
/luckysheet/*静态资源(怀疑资源未加载或加载顺序异常)。
目标
- 全屏首次打开就稳定显示完整 Luckysheet UI(工具栏、公式栏、sheetbar 等)。
- 资源加载可观测(能确认 JS/CSS 确实加载完成)。
- 不破坏现有 Convex 数据读写链路(
/api/tables/*-> Convex query/mutation)。
Checklist(按优先级)
A. 资源加载与初始化时序(高优先级)
- 确认 Luckysheet CSS 与 JS 都已加载完成,再允许
create()(避免“JS ready 但 CSS 未 ready”导致的高度/布局计算错误)。 - 首次创建后触发一次
resize(部分情况下 Luckysheet 需要通过 resize 重新计算 UI 布局)。 - 记录/暴露资源清单(仅 dev):便于确认当前页面是否完成注入与版本号是否一致。
B. 全屏容器可见性与布局(高优先级)
- Luckysheet
create()时容器必须“已占位且可计算尺寸”(不要在display:none的容器里初始化)。 - Loading/Error 采用绝对定位遮罩,避免通过隐藏容器实现 loading(防止尺寸为 0 导致布局计算异常)。
C. 与 Convex 数据链路的时序(中优先级)
- 表格数据(snapshot/schema/title)获取完成后再创建实例,避免多次 create/destroy 抖动。
- 保存/同步触发频率可控(debounce),避免高频 mutation 导致卡顿(尤其在外网高延迟场景)。
D. 观测与回归(中优先级)
- 在控制台输出关键阶段日志(仅 dev):
资源加载完成/create/destroy/resize。 - 复现用例:首次全屏打开(冷启动)、关闭后再开、刷新后再开、嵌入 iframe 与全屏互不影响。
已实施修复(对应 A/B)
wolai-frontend/src/components/online-table/useLuckysheetLoader.ts:CSS 注入改为等待onload,并与 JS 一起作为 ready 条件;dev 下暴露window.__wolaiLuckysheetResources便于排查。wolai-frontend/src/components/online-table/FullScreenTableEditor.tsx:容器始终占位 + overlay 遮罩;create()后触发resize(含兜底调用luckysheet.resize?.())。
验证步骤(建议)
- 冷启动后打开含在线表格的文档,点击“全屏编辑”,观察工具栏/公式栏是否一次成功显示。
- 打开 DevTools -> Network / Sources,确认首次打开会请求
/luckysheet/*,且 CSS/JS 不报错。 - 控制台查看
window.__wolaiLuckysheetResources(dev 模式)是否存在,以及资源路径版本号是否一致。