2010-01-13 82 views
8

我想在我的PHP脚本中使用GD库来从外部服务器生成一个随机大图的小缩略图。每次调用页面时,GD库都会重新生成一个缩略图并显示它。GD库是否使用大量内存?

这是否会降低服务器速度或耗用不寻常的内存?

+0

重新生成缩略图需要服务器时间。要知道它是否“太慢”,唯一的方法就是试试看。另外,“记忆”和“速度”是两个完全不同的概念。 – 2010-01-13 21:05:56

回答

1

确定它会降低服务器的速度,这也取决于您使用的图像的大小。你为什么不保存缩略图?

0

如果您在每次页面加载时生成新的缩略图,则需要额外的处理时间。根据您缩略图的图像数量以及原始尺寸,您可能会注意或不会注意到缓慢。如果无论如何,您可以在第一页加载时创建缩略图并保存,并加载预先创建的其他页面加载版本,则会更好。

7

GD使用大量内存。它将图像完全加载到内存中并对其进行解压缩,因此每像素至少需要32位。与大小800×600的图像做然后用起来:

800 * 600个* 32个比特= 15.4兆比特= 2 MB

这只是加载图像。我听说如果你调整大小,它会使用这个的两倍,如果你的图像更大,它会更多的记忆。

你应该真的考虑缓存你的缩略图,这样它们只需要生成一次(这也会加快访问者的页面速度!)。

我也读过现在您正在从外部服务器加载图像,在这种情况下,您真的必须缓存图像,否则您的访问者必须等待您首先下载整个图像。如果外部服务器关闭或超载,访问者将不得不等待超时(这看起来像是你的服务很慢),这会变得更糟。除此之外,如果每次用户请求缩略图时下载图像,则会浪费大量带宽。


由于GD使用这么多的内存,所以使用IMagick扩展代替生成缩略图可能是值得的。 ImageMagick在内存消耗方面的扩展性更好,而且速度也非常快(但由于上述原因,您仍然应该缓存图像)。

+1

+1 for *“ImageMagick在内存消耗方面做得更好”*,这是您应该以粗体显示的关键信息!你可以删除其余的。 :-) – TMS 2012-04-17 20:54:55

1

任何类型的图像处理都可能是内存密集型的。

如果您可以缓存这些图片以避免每次点击页面时重新生成图片,那将是一个很好的举措。

为您处理大量缓存的PHP库是phpThumb--它可能是这类任务的理想选择。

http://phpthumb.sourceforge.net/