56 lines
2.8 KiB
Markdown
56 lines
2.8 KiB
Markdown
# 需求分析
|
||
|
||
开始时间:2026-05-03-23-22-10
|
||
|
||
## 原始需求
|
||
|
||
用户要求严格使用代码编纂工作流,并在最开始确认整体流程。本次需求分析、实现方案、测试方案和执行修改均不需要用户二次人工确认。
|
||
|
||
需要修复两个问题:
|
||
|
||
1. 点击 DICOM 阅览中的切片滚动条时出现与 ZIP 文件相关的浏览器警告:`The file at ...head_ct_morph_selected_54ed40feeb63.zip was loaded over an insecure connection. This file should be served over HTTPS.`
|
||
2. 切换 DICOM 阅览显示模式时出现请求失败:`GET /api/library/reformat-preview ... net::ERR_CONNECTION_RESET`。
|
||
|
||
## 目标
|
||
|
||
- DICOM 阅览切片滚动和显示模式切换不再导致后端连接重置。
|
||
- 降低切片滑杆快速拖动时的请求风暴和后端内存压力。
|
||
- ZIP 下载完成后只触发一次下载,避免和其他 UI 操作交织造成误触发。
|
||
- 尽量避免通过直接加载 ZIP URL 的方式触发浏览器 insecure file 警告。
|
||
|
||
## 影响范围
|
||
|
||
- `web_backend.py`
|
||
- DICOM 阅览重建预览接口。
|
||
- DICOM 体数据读取和缓存策略。
|
||
- 文件下载响应的连接中断容错。
|
||
- `WebSite/src/App.tsx`
|
||
- DICOM 阅览请求节流/防抖。
|
||
- ZIP 下载触发逻辑。
|
||
- 已完成 ZIP job 的重复下载保护。
|
||
- `工程分析/经验记录.md`
|
||
|
||
## 当前定位
|
||
|
||
- 后端日志显示 `python ../web_backend.py` 被系统 `Killed`,符合快速并发读取整套 DICOM 体数据导致内存压力过大的表现。
|
||
- 当前 `/api/library/reformat-preview` 每次请求都会调用 `load_dicom_volume(item["dicomPath"])`,快速拖动滑杆或切换窗位会并发生成多个请求。
|
||
- 前端阅览 effect 在 `viewerSliceIndex`、`viewerWindow` 等状态变化时立即发请求;AbortController 只中断浏览器端等待,不能中止后端已经开始的体数据读取。
|
||
- ZIP 下载目前通过临时 `<a>` 直接访问后端 `/api/file?path=...zip`,浏览器可能显示 HTTP 文件下载安全警告;同时需要防止同一个 ZIP job 多次自动触发下载。
|
||
|
||
## 约束
|
||
|
||
- 不需要用户二次确认,可以直接执行修改。
|
||
- 不改变真实 DICOM 形变算法。
|
||
- 不引入大型前端 DICOM 阅片库。
|
||
- 不把运行缓存图片、ZIP、DICOM 或构建产物提交到仓库。
|
||
|
||
## 风险点
|
||
|
||
- 体数据内存缓存会占用一定内存,需要按影像库目录签名复用并限制缓存规模。
|
||
- Blob 下载大 ZIP 会占用浏览器内存;本次优先用于减少直接 URL 加载警告,仍需关注超大 ZIP 的浏览器表现。
|
||
- 浏览器对 HTTP 下载的安全提示无法在纯 HTTP 部署下彻底消除;如果必须完全消除,需要 HTTPS 部署。
|
||
|
||
## 待确认事项
|
||
|
||
用户已明确本次不需要二次人工确认,因此本次文档写完后直接执行实现和测试。
|