feat: v0.4.0 差异计算 worker 化 - 大文件 diff 移入 Worker 后台计算不阻塞界面、输入去抖与过期任务丢弃(终止重建实现取消)、小输入同步快路径、无 Worker 环境回退、计算中遮罩与导出禁用
This commit is contained in:
+18
-2
@@ -47,15 +47,22 @@ src/renderer/src/
|
||||
│ └── setup.ts # 全局 setup:jest-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;可用环境返回实例
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user