使用缓存或上传动态创建缩略图


Create thumbnails on the fly with cache or on upload?

我目前正在重写一个网站,每个图像需要很多不同的大小。在过去,我是通过在上传时创建各种尺寸的缩略图图像来做到这一点的。但现在我对它的表现有点怀疑。这是因为现在我不得不改变我的设计,而我的一半图像大小不合适。所以我想到了两个解决方案:

  1. 继续这样做,并在后端添加一个按钮来重新生成所有图像。问题是,我总是需要知道网站每个部分所需的每一种尺寸。

  2. 只上传真实大小的图像,显示时,在SRC标签中放入类似sr="thumbs.php?img=我的图像路径/image.jpg&width=120&height=120"的内容。然后创建拇指并显示它。此外,我的脚本会检查拇指是否已经存在,如果存在,则不需要重新创建,所以只显示它。每5天启动一个带有crontask的脚本,删除所有拇指(确保只使用有用的拇指)。

我认为第二种解决方案更好,但我有点担心的是,每次显示图像时,我都需要调用php,即使它已经创建,也是php让它显示。。。

感谢您的建议

根据最初的问题和随后的评论,按需生成似乎适合您,因为在绝对减少到最终客户端的下载时间方面,您的环境并不苛刻。

您似乎已经掌握了给<img>标记一个src值的选项,该值是一个PHP脚本,该脚本要么提供缓存的缩略图(如果存在),要么动态生成缩略图,缓存它,然后提供它,所以让我给您另一个选项。

一般来说,当你开始将你的网站扩展为时,利用PHP来提供静态资源并不是一个好主意

  1. 这将需要调用PHP来提供这些类型的请求的额外开销,而使用Apache、Nginx等基本web服务器会对其进行更优化。这意味着你的网站将能够处理每台服务器更少的流量,因为它使用了额外的内存、CPU等来提供这些静态内容
  2. 这使得很难将这些静态资源移动到服务器之外的单个存储库中以提供内容(如CDN)。这意味着你必须在每个为网站供电的网络服务器上复制你的文件

因此,我的建议是仍然通过Web服务器将图像作为静态图像文件提供,但如果它们丢失,则会动态生成缩略图。要实现这一点,您只需在web服务器上创建一个自定义重定向规则或404处理程序,就可以将缩略图目录中与现有缩略图不匹配的请求重定向到PHP脚本,以自动生成缩略图并提供图像(浏览器甚至不知道)。将来针对该缩略图的请求将作为静态图像提供。

这可以很好地扩展,因为如果将来您需要将静态图像移动到单个服务器(或CDN),您只需使用原始拉取机制尝试从主服务器获取内容,主服务器将通过我刚才提到的相同机制自动生成内容。

如果没有太多的存储空间,请使用第二个选项;如果没有太大的CPU,请使用第一个选项。

或者您可以将它们结合起来:在php缩略图生成器的第一次打开时生成并存储图像,下一次只返回缓存的图像。

有了这个解决方案,你将只有必要的图像,如果你愿意,你有时可以删除旧的图像。