2009-08-14 47 views
0

我在PHP中有一个将图像大小调整为缩略图的功能,我的图像上传脚本需要上传的图像并运行此功能来调整图像的大小,如果它的宽度超过700px,功能可以再创建2个不同尺寸的缩略图图像,因此每次用户上传图像时总共会保存3个图像。我的缩放/缩略图功能在缩略图中被调用2次,如果文件在宽度上很宽,偶尔会调用第3次。有关PHP中图像缩略图性能的问题

现在这个调整大小的函数使用getimagesize()来获取尺寸,所以我的uplaod脚本调用这个函数,然后调整大小函数使用getimagesize()函数2-3次来制作其他大小的图像。

我在想,我应该只是将尺寸传递给resize函数,因为我在上传过程中获得它们?

我真正的问题是,getimagesize()是一个资源饥饿的functon,最好是尽可能使用它,或者在1张图片上传的时候多次调用它几次?

回答

3

只是一个提示/ precausion,我asssume你使用GD功能。创建多个缩略图时,通常的瓶颈是错误地实现了图像大小调整功能 - 每次读取原始图像,然后保存调整大小的图像。一个更好的方法是加载一次图像,并使用图像资源制作所有缩略图(使用imagecopyresampled) - 不仅将图像尺寸传递给函数 - 还传递GD引用。Thay您的原始文件只能加载一次。

+0

感谢这就是我正在考虑的事 – JasonDavis 2009-08-14 22:46:05

2

对于只在上传时运行的东西,它不应该打扰太多。上传不是用户希望获得超级快速响应的操作。 不成熟的优化是所有邪恶的根源

这就是说,getimagesize()并不是特别昂贵,但如果你只能这样称呼一次。但我并没有预测到速度会有所提高。脚本的昂贵部分是调整图像大小本身。

1

这不是特别资源饥饿 - 它必须打开一个文件并阅读图像标题。

不要用你的方式优化它 - 如果它很容易,那就去做吧。否则,请在优化之前观察应用程序瓶颈在哪里。

0

最好的办法是分析你的脚本。

而不是理论上的答案,可能不适用于特定的情况,你会得到一个真正的答案,这是非常有启发性的。

而且,与这样的习惯,你将能够:

  • 发现瓶颈
  • 使微的优化和主要优化之间的区别。

我亲自开发。在Windows上并部署在* nix上。

在我的开发工具中,我使用xdebug + WinCacheGrind来读取结果。

我离不开他们。 :)

http://elrems.wordpress.com/2008/02/12/profiling-php-with-xdebug-and-wincachegrind/

0

我不认为上传部分应该是你调整图像大小的地方。您应该稍后调整图像作为cron作业。您可以使用第三方应用程序,如imagemagick或其他调整大小的应用程序来调整图像大小。这样可以节省前端的时间。您可以每隔5分钟左右运行一次调整大小作业。

+0

我一直在考虑这个 – JasonDavis 2009-08-14 22:47:12