我想在php中使用GD库创建多个缩略图,我已经有了一个脚本来执行此操作,问题是什么对我更好..是否更好地动态创建缩略图?或者每次我想要一个拇指在我的服务器上创建一个物理文件?为什么?
请考虑耗时和存储容量以及其他两个方面的缺点
答案 0 :(得分:3)
当你创建缩略图时,取决于几个因素(我将进入),但你永远不应该丢弃这样的输出(除非你永远不会再使用它),因为这是一个非常昂贵的操作。
无论如何,“何时生成缩略图”的两个主要选择是:
第一次请求时。这很常见,这意味着您不会生成从未使用过的缩略图,但它确实意味着如果您有一个充满首次缩略图的页面,服务器可能会因生成缩略图的PHP进程而不堪重负。
我和Sorl + Django有类似的问题,我在上传后的每个请求中为前几个请求生成了100多个缩略图,它基本上使整个服务器挂起了20分钟。不好。
上传时生成所有必需的缩略图。因为上传需要很长时间,所以你可以对处理进行大量细分。您也可以将其拉出进程(即使用另一个脚本来处理上传 - 甚至可能不在PHP中)。
明显的缺点是你正在耗尽你可能不需要用尽的磁盘空间......但除非你在谈论成千上万的缩略图,否则一小部分未使用的缩略图可能不会破坏银行。
当然,如果磁盘空间有问题,可能会有一个参数,用于在处理缩略图的同时将缩略图推送到CDN。
保存缩略图时需要注意的一点是,您需要在某个位置调整缩略图的大小,或者想要两个小变体。我发现使文件名非常具体非常有用,因此如果原始图像为image.jpg
,则200x200版本为image-200x200.jpg
。
答案 1 :(得分:1)
GD真的是资源很重,所以你应该看一下你是否可以使用ImageMagick(它的语法更清晰)。
在第一次运行后,无论是否运行GD或ImageMagick,您最好在缓存创建的缩略图时更好,并从缓存中提供它们。如果您担心存储,请立即从缓存中清除旧文件。
答案 2 :(得分:1)
两者都不是 - 在你需要它们之前不要生成缩略图 - 但保留你生成的文件。
通过这种方式,您可以最大限度地减少所需的工作量并拥有自我修复系统
下进行。
答案 3 :(得分:0)
始终缓存(=写出磁盘)GD操作的结果。它们在处理器时间和内存方面都太昂贵了,每次都可以在飞行中完成。随着访客/点击次数的增加,这种情况越来越真实。