feat: v0.4.0 差异计算 worker 化 - 大文件 diff 移入 Worker 后台计算不阻塞界面、输入去抖与过期任务丢弃(终止重建实现取消)、小输入同步快路径、无 Worker 环境回退、计算中遮罩与导出禁用

This commit is contained in:
2026-08-17 23:26:55 +08:00
parent 1d1b92e624
commit 1ecf5ae7d3
17 changed files with 472 additions and 29 deletions
+18 -2
View File
@@ -47,15 +47,22 @@ src/renderer/src/
│ └── setup.ts # 全局 setupjest-dom 匹配器 + 自动 cleanup
├── diff/
│ ├── diffEngine.test.ts # diff 引擎单元测试
│ ├── diffWorker.ts # diff 计算 Web Worker(内联打包,覆盖率排除,逻辑由 diffEngine 覆盖)
│ ├── createDiffWorker.test.ts # worker 工厂(环境回退/实例化)
│ ├── createDiffWorker.ts # worker 工厂:环境不支持时返回 null 由调用方回退
│ ├── report.test.ts # 报告生成测试
│ └── textUtils.test.ts # 文本扩展名与行数统计测试
├── hooks/
│ ├── useDiff.test.ts # worker 化计算 hook(快路径/去抖/过期丢弃/回退/卸载清理)
│ ├── useDiff.ts
│ └── useDismiss.ts
├── components/
│ ├── ContextMenu.test.tsx # 右键菜单(含边缘防溢出)
│ ├── DiffView.test.tsx # 对比视图(渲染/滚动同步/右键/拖放)
│ ├── TextInputModal.test.tsx # 粘贴文本弹窗
│ └── Toolbar.test.tsx # 工具栏(选项/导航/导出菜单)
│ └── Toolbar.test.tsx # 工具栏(选项/导航/导出菜单/计算中禁用
└── __tests__/
├── App.test.tsx # 应用集成级测试(加载/拖拽/粘贴/导出/容错)
├── App.test.tsx # 应用集成级测试(加载/拖拽/粘贴/导出/容错/大输入回退
└── main.test.ts # 入口挂载冒烟测试
```
@@ -98,6 +105,15 @@ src/renderer/src/
- 仅看差异视图:未更改行折叠、折叠提示出现、关闭后恢复
- F7 / Shift+F7 导航快捷键;粘贴弹窗打开时快捷键不抢占
- 交换左右侧后面板文件互换
- 大输入(超快路径阈值)在无 Worker 环境回退同步计算,无计算中遮罩
### 5.6 diff 计算 worker 化(`useDiff.ts` / `createDiffWorker.ts`
- 快路径:两侧总行数不超过 2000 时同步计算,不创建 worker,结果与 computeDiff 一致
- 重路径:进入 computing 且 diff 置空;200ms 去抖后才派发 worker;响应按 jobId 匹配,错误/过期 jobId 被丢弃
- 输入变更:旧 worker 终止重建(等价取消);去抖期内变更则旧任务未派发即取消(零浪费计算)
- worker 不可用(环境缺失/工厂返回 null):主线程同步回退
- 卸载:终止 worker 并清理去抖定时器
- 工厂:无 Worker 环境返回 null;可用环境返回实例
---