我知道 SO 上有相关问题,但我不确定要求我处理的条件是否会导致答案发生任何变化,所以我在这里询问。
我正在 Angular 中创建一个简单的 Web 应用程序,该应用程序从用户导入电子表格数据并将数据发送到 Django 后端,后者对其进行数据分析。数据结果返回到前端,Angular 创建结果的仪表板。电子表格的每一列都会显示一个图表。我面临两个选择:
a) 将电子表格保存在浏览器内存中,并将每列数据分别发送到 Django 服务器,由 Django 服务器分析数据并返回结果。
Pros: Simple architecture. No caching required.
Cons: If there are 150 columns in the sheet, it will result in 150 calls to the API for that user.
b) 发送整张数据并让 python 处理一切。它将返回大量数据,这些数据必须由 Angular 解包。
Pros: Only one request per file.
Cons: For subsequent calls for the same file, I might need caching? If the file has changed, it might cause stale data. I might also need to maintain sessions per user.
我正在使用的限制:我无法将文档存储在 Django 服务器或数据库上。尽管这只是一个内部应用程序,但文档可能很敏感,并且用户不会接受任何类型的存储。
此外,文件大小很可能超过 100 MB,因此这也成为一个因素。
在这种情况下,“许多小请求”是否更有意义? 如果问题重复,请提前道歉。
最佳答案
您没有考虑的另一个因素是浏览器(比如 Chrome)仅分配 6 TCP ports per host 。这意味着,如果您采用“许多小请求”方法,您可能会面临一些严重的性能问题,具体取决于后端处理该请求所需的时间。
另一个需要考虑的因素是您将如何处理数据回滚?如果您完成了 50% (75) 的请求,而用户想要取消或浏览器崩溃等,那么其他 50% 会发生什么?
如果这是在快速网络上运行的内部应用程序,我个人会只处理每个文件的批量一个请求。 100GB 网络上的 100MB 并不是什么大问题。
如果不是在内网,那么我就必须选择微交易,因为上传到 99% 并在 10 分钟后失败的用户体验我相信我们都经历过(可怕的) )。至少通过微事务方法,您可以控制数据回滚,甚至在前端打开套接字以进行更新。就像如果某个列在处理过程中失败,那么 Angular 可以尝试重新发送它等等。
这里没有一种方法适合所有情况,这只是我的意见。
关于python - 许多小请求与少量大请求 - Angular 到 Django REST API - 不涉及数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58517038/