Javascript 用JS下载大型数据集

Javascript 用JS下载大型数据集,javascript,angularjs,asp.net-web-api,download,blob,Javascript,Angularjs,Asp.net Web Api,Download,Blob,我有一个web应用程序,它有一个OWIN SelfHost WebAPI后端和一个AngularJS前端 在一个特定的视图中,我希望能够从服务器API收集大量数据,然后(按需,而不是立即)将其写入客户端CSV文件 未格式化的二进制数据约为每秒80KB或每分钟4.6MB;我期望CSV比这个大很多,但我还没有一个精确的测量。大多数使用预计将达到约30分钟(140 MB),但我希望尽可能长时间支持捕获 目前,我有API代码来启动数据捕获并将其存储在服务器内存中,但它很快就会用完。所以我在寻找替代方案。

我有一个web应用程序,它有一个OWIN SelfHost WebAPI后端和一个AngularJS前端

在一个特定的视图中,我希望能够从服务器API收集大量数据,然后(按需,而不是立即)将其写入客户端CSV文件

未格式化的二进制数据约为每秒80KB或每分钟4.6MB;我期望CSV比这个大很多,但我还没有一个精确的测量。大多数使用预计将达到约30分钟(140 MB),但我希望尽可能长时间支持捕获

目前,我有API代码来启动数据捕获并将其存储在服务器内存中,但它很快就会用完。所以我在寻找替代方案。(我还没有编写客户端部分,因此更具延展性。)

我的第一个想法是让服务器编写一个临时文件/db来保存捕获期间的数据,然后在请求下载时重新加载并将其分块流式传输到JS。但是,这不也会让浏览器内存不足吗

更复杂的是,目前服务器只有“原始”数据,这些数据作为JSON发送给JS,以便在JS将其格式化为CSV之前对其执行一些调整。是否最好将其移动到服务器端,以便客户端只下载预烘焙的CSV?(这会有点烦人,因为它需要复制少量代码,但相当简单。)

服务器不需要处理许多并发请求(特别是不是这种类型的请求,尽管这不是不可能的),但是如果在两者之间进行选择,我更愿意让客户端完成大部分工作


我的目标是最新的浏览器(主要是Chrome浏览器),因此使用新的API是可以的(研究表明Blob是最合适的,尽管我不确定这是否允许客户端重新格式化),尽管交叉兼容性总是很好。

从服务器发送CSV比发送JSON要轻得多,因为有重复的键和引号。将允许您下载尽可能大的文件,浏览器可以支持;几百个meg Blob即使在最近的设备上也应该是可行的。JSON数据作为多个同级数组发送,而不是作为对象数组发送,以避免重复键名,因此目前JSON格式与CSV非常相似。但是客户端代码将扩展一些数据(以多种格式记录单个值),因此最终的CSV将大于从服务器接收的CSV。或者至少这是最初的计划。如果数据重复,您还可以从服务器或客户端使用gzip或zip来减小大小。jszip可以生成zip文件,然后可以下载这些文件。如果可以将数据大小降低到20-30MB,则可以只使用dataURL,而不使用window.URL支持。压缩是提高性能的一个好主意—数据可能会重复出现—但我需要先让它工作。:)