WuYongJie 6f023e3f0d fix(product-archive): 导出改为流式写出,修复全量导出 OOM 崩溃
正式站导出「产品全量档案资料」必然崩溃:整包写法在 89 列下约 60MB/千行,
生产 Node 堆被 PM2 限到 768MB,实际只能撑约 5000 行,而档案表已有 7 万余行。
PM2 记录 exited with code [0] via signal [SIGABRT],error log 19 次
FATAL ERROR: Reached heap limit,最后一次 GC dump 763.5MB(= 堆上限)。

改成「先冻结行 id 快照 → 每 2000 行分批取数 → ExcelJS 流式写出 → 边生成边下发」,
服务端堆占用与导出总行数解耦;并加同机并发上限 3(超限 429)兜底。

- repository:listRows 全量取数改为 openRowSource。先冻结本次要导的有序 id 快照,
  再按 id 分批取完整行并按冻结顺序重排,避免导出期间上游同步导致行集合错位。
- service:createWorkbook 整包 writeBuffer 改为 openWorkbook 流式写出。
  useSharedStrings:false(共享字符串表会累积全部唯一文本且无法回收);
  冻结首行走 addWorksheet 的 views 选项(流式 worksheet 的 views 只有 getter,
  直接赋值会被静默忽略);并发额度在「正常写完」与「客户端断开」两条路径都归还。
- route:改为流式响应,不再发 Content-Length(改 chunked);监听 request.signal,
  客户端断开时销毁生成流;响应头发出后生成失败只能掐断流,故在路由层记日志。
- 前端:下载态文案改为「正在生成并下载文件...」;无 Content-Length 时显示「已接收 X」;
  收流中断统一提示为可读文案,不再只报网络错误。
- 测试:5 个用例,含冻结首行回归守护与「客户端中途断开不泄漏并发额度」守护。

验证:本地真实库 66033 行 × 89 列,NODE_OPTIONS=--max-old-space-size=768 下
首字节 0.5s / 总耗时 26.7s / 产物 25.8MB / 峰值 heapUsed 152.5MB(对照:整包写法
同规模在 4GB 堆直接 OOM)。3001 真实路由 13951 行:status 200、无 Content-Length、
chunked、首字节 0.2s、5.5s / 5.6MB。产物特性 10/10(表名、冻结首行、autoFilter
A1:CK1、89 列宽度、表头加粗与文本、行数),并用 openpyxl 独立交叉复核一致。
jest 5/5 通过、type-check EXIT=0。

已知边界:只在本机 next dev 验证,未跑 next build / next start。
2026-09-16 16:07:31 +08:00

由壹点「产品开发平台」工作区

最后更新:2026-04-07
当前主线:资产中心 -> 自动组合 -> 草稿组 -> 包装方案 -> 正式入库 -> 轻仓库

这个工作区真正长期开发的项目在 furniture-3d-system/。 旧 CAD -> 装配编辑 -> 装配步骤 -> 回放 链仍保留,但它现在是兼容链,不是默认主线。

先看哪里

  1. AGENTS.md
  2. furniture-3d-system/docs/workflow/团队协作模式.md
  3. furniture-3d-system/docs/workflow/模块边界说明.md
  4. furniture-3d-system/docs/workflow/主线同步操作手册.md
  5. furniture-3d-system/docs/README.md

工作区结构

.
├── furniture-3d-system/   主项目
├── docs/                  工作区级协作与交接文档
├── 方案设定/             设计稿与方案素材
├── flnxi_sucai/           参考资料
└── README.md

当前文档规则

  • 当前有效的协作入口只认 furniture-3d-system/docs/workflow/ 下那 3 份协作文档。
  • 根目录 docs/前端UI改动清单.md 是当前前端交接执行单,不是历史总结。
  • 一次性阶段报告、完成报告、旧 UI 方案已清理,不再保留为默认入口。

常用命令

cd furniture-3d-system
npm install
npm run dev
npm run type-check
npm run build

补充说明

  • 非代码参考资料默认不参与构建。
  • 没有用户明确要求,不主动提交、推送、发版。
Description
3D家具展示系统
Readme 391 MiB
Languages
TypeScript 91.1%
JavaScript 5.1%
C# 1%
PowerShell 0.7%
CSS 0.6%
Other 1.4%