异步导出搜索结果为csv文件看似简单需求,做起来却没那么容易。前端和后端都有许多细节工作要做。

难点一:前端的搜索条件或结果如何传递到后端队列中,如果传递条件,条件查询可能会依赖前端的其他函数或库,处理队列的任务需要重复包含许多逻辑,很不优雅;直接传递结果对象太多体积太大,料想必然会很占资源。最终结局方案是传递 SQL 语句。队列任务直接运行SQL进行查询,省掉许多中间过程。
难点二:后端执行任务以后,如何通知到前端去下载文件。这里有几种方案:1)使用email离线通知;2)使用 websocket 推送;3)前端轮询。1 操作繁琐更适合超大量数据(耗时N分钟以上)导出,2 架构复杂有高射炮打蚊子的感觉,而且websocket可能不是太稳定,最终选择 3,客户端用 HEAD每隔一秒去fetch文件状态,一旦文件存在(返回200)则渲染一个下载链接,用户使用 GET方法点击下载

Sign in to participate in the conversation
CleverLibre Social

CleverLibre Social is an inclusive social instance for open discussion, learning, and community.
All cultures welcome.
Hate speech and harassment strictly forbidden.