我正在使用 Java 和 Spring MVC 开发一个网站。有一个表格允许输入一些细节和附加图像。当用户提交表单(单击提交按钮)时,数据和图像都会上传到服务器。上传的图像在三个不同的地方以三种不同的尺寸显示给用户。
我目前正在做的是将图像调整为三种不同的分辨率并保存。但这会使上传速度变慢,因为调整大小会增加处理时间。
加快速度的一种方法是运行两个并行线程来进行转换和保存。
还有其他更好的方法吗?
我正在使用 Java 和 Spring MVC 开发一个网站。有一个表格允许输入一些细节和附加图像。当用户提交表单(单击提交按钮)时,数据和图像都会上传到服务器。上传的图像在三个不同的地方以三种不同的尺寸显示给用户。
我目前正在做的是将图像调整为三种不同的分辨率并保存。但这会使上传速度变慢,因为调整大小会增加处理时间。
加快速度的一种方法是运行两个并行线程来进行转换和保存。
还有其他更好的方法吗?
我可以想到三种方法:
同步,单线程。
这是您当前的解决方案。调整图像大小在处理上传请求的同一线程中按顺序(一张一张)执行,从而增加了总请求处理时间(如您所见,使整个过程明显变慢)。它可以说是实现起来最简单的。只有在处理完所有图像(这是“同步”部分)后,控件才会返回给用户。
同步的,并行的。
调整图像大小可能会受益于并行化,因此您可以使用 aCompletionService
提交所有调整大小的任务并将它们设置为同时处理并等待所有任务完成(即),然后再发回响应。用户仍然必须等到所有图像都准备好。
异步。
上传处理控制器将调整大小任务排队到服务并立即返回;然后,调整大小服务将尽最大努力尽快处理图像。这种方法的问题在于它创建了一个短窗口,在该窗口中,控制权归还给用户,但缩略图还没有准备好。处理此问题(YouTube 等)的常用方法是显示某种占位符,表示“仍在处理”,直到准备好实际结果。
您是唯一可以选择最佳解决方案的人,具体取决于您的要求和页面的动态程度,例如它是否可以轮询服务器以检查调整大小作业是否已完成(并且占位符可以替换为实际调整大小的图像)