在 VPS 上,文件系统中的图像加载速度非常慢,在本地主机上则更快

在 VPS 上,文件系统中的图像加载速度非常慢,在本地主机上则更快

我的/端点返回 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 的数据就需要这么长时间,这似乎不对,尤其是考虑到在本地主机上加载速度要快得多。

相关内容