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

时间:2013-11-30 00:46:56

标签: php thumbnails

我目前正在为每个图片重写一个需要大量不同尺寸的网站。在过去,我是通过在上传中为所有尺寸创建缩略图图像来实现的。但现在我对性能表示怀疑。这是因为现在我必须改变我的设计,我的一半图像尺寸不合适。所以我想到了两个解决方案:

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

  2. 仅上传实际尺寸的图像,并在显示时,将SRC标记放入sr =“thumbs.php?img = my-image-path / image.jpg& width = 120& height = 120" 。然后创建拇指并显示它。此外,我的脚本将检查拇指是否已经存在,如果它确实不需要重新调整它,所以只显示它。每5天启动一个带有crontask的脚本来删除所有的拇指(确保只使用有用的拇指)。

  3. 我认为第二种解决方案更好,但我有点担心我需要在每次显示图像时调用php,即使它已经创建了,它的php也可以显示... < / p>

    感谢您的建议

2 个答案:

答案 0 :(得分:1)

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

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

使用此解决方案,您将只拥有必要的图像,如果需要,您可以删除旧版本。

答案 1 :(得分:1)

基于原始问题和随后的评论,听起来像按需生成将适合您,因为它听起来不会在绝对最小化下载时间方面具有苛刻的环境最终客户。

您似乎已经掌握了为<img>标记提供src值为PHP脚本的选项,该脚本可以提供缓存的缩略图(如果存在),或生成它在运行中,缓存它,然后提供它,所以让我给你另一种选择。

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

  1. 这将需要额外的开销来调用PHP来提供这些类型的请求,更多的是使用Apache,Nginx等基本Web服务器进行优化。这意味着您的站点将能够处理每台服务器更少的流量因为它使用额外的内存,CPU等来提供这个静态内容。
  2. 这使得很难将这些静态资源移动到服务器外部的单个存储库中以提供内容(例如CDN)。这意味着您必须在为站点供电的每台Web服务器上复制文件。
  3. 因此,我的建议是仍然通过网络服务器将图像作为静态图像文件提供,但如果丢失则动态生成缩略图。要实现此目的,您只需在Web服务器上创建自定义重定向规则或404处理程序,以便缩略图目录中与现有缩略图不匹配的请求可以重定向到PHP脚本以自动生成缩略图并提供图像(没有浏览器甚至知道它)。针对此缩略图的未来请求将作为静态图像提供。

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