Skip to content

自动模式路由 ​

exportExcel 的 mode 参数默认是 "auto":库根据总行数与运行环境自动选择最优路径,业务代码无需感知数据量变化。

路由规则 ​

浏览器 ​

数据量路径说明
< 20,000 行main主线程同步构建,10k×6 列浏览器实测约 120ms
20,000 – 49,999 行worker + Workbook主线程只做一次结构化克隆(10 万行约 94ms),WASM 在 Worker 内执行
>= 50,000 行worker + Fast stream自研 fflate 写入,避免 toBuffer 性能断崖

Node / SSR(无 Web Worker) ​

数据量路径说明
< 50,000 行main主线程 Workbook 构建,保留完整样式
>= 50,000 行streamFast stream,10 万行约 0.8s

手动指定 ​

ts
await exportExcel({ ..., mode: "stream" });  // 强制流式
await exportExcel({ ..., mode: "worker" });  // 强制 Worker(浏览器)
await exportExcel({ ..., mode: "main" });    // 强制主线程

mode: "worker" 在 Node/SSR 环境不会报错:库会回退到主线程路径(≥ 5 万行用 stream),保证样式语义不丢失,而不是降级成无样式的流式路径。

阈值为什么是 20,000 / 50,000 ​

  • 20,000 行:主线程同步工作在此量级以下可接受,避免不必要的 Worker 启动开销;
  • 50,000 行:实测 Workbook.toBuffer() 在 ~5.5 万行开始出现超线性性能断崖(10 万行 ~17.5s),而 Fast stream 约 0.8s。STREAM_THRESHOLD = 50_000 保留了安全余量。

代价说明:Stream 路径支持多行表头与单元格合并,但不支持单元格样式、表头样式与列宽/冻结/筛选等布局特性。需要完整样式的导出请控制在 5 万行以内,或拆分为多个工作表。