0

我在 PHP 中有一个将图像大小调整为缩略图的函数,我的图像上传脚本获取上传的图像并运行此函数来调整图像的大小,如果它比 700px 更宽,然后它还运行该函数 2 次以创建 2 个不同大小的缩略图图片,所以用户每次上传图片一共保存了3张图片。我的 resize/thumbnail 函数会调用 2 次缩略图,如果文件尺寸过宽,偶尔会调用 3 次。

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

我在想我应该只将尺寸传递给调整大小功能,因为我在上传过程中得到了它们?

我真正的问题是,getimagesize() 是一个资源匮乏的函数,最好至少尽可能使用它,还是在上传 1 张图片时调用它几次?

4

5 回答 5

3

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

于 2009-08-14T20:05:27.347 回答
2

对于仅在上传时运行的东西,它不应该那么麻烦。上传不是用户期望超快速响应的操作。过早的优化是万恶之源

话虽这么说,getimagesize()并不是特别昂贵,但如果你只能调用一次,就这样做。但我预计速度不会有那么大的提高。脚本中代价高昂的部分是图像本身的大小调整。

于 2009-08-14T19:19:06.300 回答
1

它并不是特别需要资源——它必须打开一个文件并读取图像标题。

不要竭尽全力优化它 - 如果它很容易,那就去做吧。否则,请在优化之前等待并查看应用程序中真正的瓶颈在哪里。

于 2009-08-14T19:19:08.533 回答
0

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

于 2009-08-14T20:16:55.997 回答
0

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

而不是可能不适用于特定情况的理论答案,您会得到一个真实的答案,它真的很有启发性。

此外,有了这个习惯,您将能够:

  • 发现瓶颈
  • 区分微优化和大优化。

我个人开发。在 Windows 上并在 *nix 上部署。

在我的 dev dox 上,我使用 xdebug + WinCacheGrind 来读取结果。

没有他们我活不下去。:)

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

于 2009-08-14T19:55:12.173 回答