我的/
端点返回 11 个 DTO,每个 DTO 都有一个String
字段imagePath
,看起来像这样http://localhost:8082/api/get_image/imagename.png
(在 VPS 上时,imagePath
看起来像这样:)http://123.456.78.901/api/get_image/imagename.png
。
另一个端点/get_image
返回具有所提供名称的图像:
@GetMapping(value = "get_image/{name}", produces = MediaType.IMAGE_JPEG_VALUE)
public @ResponseBody byte[] getImage(@PathVariable(name = "name") String name) {
...
byte[] image = this.fileService.getFile(fullPath);
return image;
}
我在 Spring 代码中使用此方法从文件系统加载图像:
public byte[] getFile(String path) {
try {
File file = new File(path);
InputStream in = new FileInputStream(file);
return IOUtils.toByteArray(in);
} catch (IOException e) {
return null;
}
}
当我在本地主机(我的家用电脑,包含图像的文件夹也位于同一台电脑上)加载带有图像的页面时,我得到以下结果:
但是,当我在 VPS 上部署相同的代码(包含图像的文件夹也被复制到 VPS 计算机)时,我得到了这个:
速度上的差异是惊人的——356 ms
与……相比11.13 s
。
我将所有 11 张图片托管在imgur
网站上,并使控制器返回带有imgur
链接的 DTO,而不是指向控制器get_image
端点的链接。
然后表现如下:
由于某种原因,仍然存在差异,但差异要小得多,并且 VPS 性能要好得多。
经过几次刷新后,localhost
加载速度开始快得多,我猜测这是由于浏览器缓存所致:
但 VPS 则不是这样。
我不确定这里发生了什么。每张图片的大小从 1MB 到 2MB 不等。每张图片的尺寸为1456x816
。我可以让每张图片变小,但在我看来,加载仅仅 13MB 的数据就需要这么长时间,这似乎不对,尤其是考虑到在本地主机上加载速度要快得多。