最近几天遇到一个问题,需要将大量的数据导出为excel,但是数据量过大,导致请求超时,以下是我想到的几种解决方案,权当参考吧。

客户端生成Excel

步骤

  1. 后端接口查询到数据后直接返回,不进行任何操作。

  2. 由前端生成Excel文件。

优点

  • 后端不需要进行Excel处理,节省了响应时间和算力。

缺点

  • 格式化后的excel文件往往比json的体积小得多,因此可能需要更多的带宽。

注意事项

在测试的时候发现,不同的插件生成的excel文件的大小有很大差异。我的测试数据有19w条,不同的插件生成的文件大小如下:

  • apache-poi(java) 5.6MB

  • xlsx(js) 50MB

  • exceljs 4.6MB

分离Excel文件生成和下载操作

步骤

1.前端发起请求后,后端异步查询数据,生成Excel文件。

2.前端查询生成的Excel文件。

优点

  • 请求的时间将会很短,不用担心请求超时

缺点

  • 实现起来比较麻烦

  • 需要更多的磁盘空间

  • 需要处理生成的文件

延长超时时间

步骤

1.前端请求时,设置一个较长的超时时间

2.后端处理完成后返回

优点

  • 处理起来比较简单

缺点

  • 请求等待时间过长

  • 服务器性能消耗严重