在大型基于图像的项目中存储和提供图像的方法


Approaches to store and serve images in a large image-based project

我手头有一个大项目。

它是基于图像和画廊。

在这个网站上有三种不同大小的图片。原始大小,缩略图大小,小尺寸

我有一个专门的服务器用于这个项目,所以间距不是我主要关心的问题,尽管我应该关注它,而且对于逻辑问题没有限制。

我的问题:发布到网站上时,哪种方法更适合保存图像?

  • 在发布时将所有三种尺寸保存在三个不同的文件中

  • 或者在加载到页面时动态调整它们的大小,这意味着只保留原始图像

优先级

  1. 质量
  2. 性能
  3. 存储

如果我是你,我不会动态生成(尤其是对于访问者查看的长图像列表,性能可能会下降,这取决于你处理它的方式)。也取决于原始大小有多大。无论如何,我都会选择"生成一次"策略,并在客户端缓存它。通过这种方式,您还可以在调整大小时提高图像的质量,并且不必太担心服务器的影响(可能会遇到真正的问题,这取决于规格和同时访问、上行链路等)

只是我的2c。

您将质量列为最高优先级,存储则列为最低优先级。在这种情况下,我会以最高可能/可接受的分辨率存储图像,并动态调整它们的大小,可能使用缓存机制总的来说,请注意缓存也将由浏览器本身执行

编辑:这似乎是SO的头像图片(而不是gravatar)的服务方式(图像尺寸在获取图像的请求中传递,请尝试更改它们)。

此外,在项目的这个阶段,实现这两种方法并根据预期负载对它们进行基准测试应该不难。然而,如果缓存没有帮助,我仍然会从动态生成的图像开始,并在稍后阶段预先计算不同的分辨率。