目标
我们建立了一个低容量站点,用户(浏览器客户端)将在其中选择图像文件(每个文件 284 KB),然后请求 Node Express 服务器将它们捆绑到 ZIP 中以下载到 Web 客户端。
问题和设计约束
- 生成的 ZIP 可能约为 50 MB - 5 GB。因此,我们希望在构建 ZIP 时为用户提供一个正在运行的进度条。(我们假设浏览器将提供有关实际下载进度的运行更新)。
- 虽然我们预计请求量很少(一次 1-2 个请求)。但是,我们不想完全占用我们的 4 核服务器处理器,因此我们希望尽量减少占用快速服务器的同步调用。
- 鉴于 ZIP 的大小,我们不能期望 zip 仅在内存中组装
- 还有其他我们需要担心的问题吗?
问题
我们假设将 7zip 作为子进程运行是不好的,因为我们不会得到任何关于有多少 258KB 文件已添加到 ZIP 的运行状态。
那么考虑到上面列出的设计约束/目标,以下哪些包是对 Node/ExpressJS 非常友好的包?
- 存档器:https ://www.npmjs.com/package/archiver
- jszip:https ://www.npmjs.com/package/jszip
- 易压缩:https ://www.npmjs.com/package/easy-zip
- expresszip:https ://www.npmjs.com/package/express-zip
- 压缩流: https ://www.npmjs.com/package/zip-stream
我在上面看到的是大多数包首先收集文件,然后将它们最终确定到内存中,然后将它们传送到 http 请求(可能对 5GB 的数据不利,或者我遗漏了什么)。有些似乎能够使用磁盘,但问题是每个文件添加时是否会获取更新事件?
其他人似乎是完全异步的,我看不出在将每个文件添加到 ZIP 包时如何获得运行进度值。