我在PHP中有一个函数可以将图像调整为缩略图,我的图像上传脚本会获取上传的图像并运行此函数来调整图像的大小,如果它比700px宽,那么它还会运行该函数2次以创建2不同大小的缩略图图像,因此每次用户上传图像时总共保存3个图像。我的调整大小/缩略图功能对于缩略图调用2次,如果文件尺寸较宽,则偶尔调用第3次。
现在这个调整大小的函数使用getimagesize()来获取维度,所以我的uplaod脚本调用这个函数,然后调整大小函数再使用getimagesize()函数2-3次来制作其他大小的图像。
我想我应该将这些尺寸传递给调整大小函数,因为我在上传过程中将它们传递出来了?
我真正的问题是,getimagesize()是一个资源饥渴的功能,最好是至少尽可能使用它,还是在1张图片上传时调用它几次?
答案 0 :(得分:3)
只是提示/预存,我猜你正在使用GD功能。当创建多个缩略图时,通常的瓶颈是错误地实现了图像大小调整功能 - 每次读取原始图像然后保存调整大小的图像。更好的方法是加载图像一次,并使用图像资源制作所有缩略图imagecopyresampled
- 不仅要将图像的尺寸传递给函数 - 还要传递GD参考。你的原始文件只加载一次。
答案 1 :(得分:2)
对于仅在上传时运行的内容,它不应该打扰太多。上传不是用户期望超快响应的动作。 过早优化是万恶之源。
话虽如此,getimagesize()
并不是特别昂贵,但如果你只是一次这样做就可以。但我不预测速度会有多大提升。脚本中昂贵的部分是图像调整大小。
答案 2 :(得分:1)
它并不是特别耗费资源 - 它必须打开文件并读取图像标题。
不要忘记优化它 - 如果它很容易,那就去做吧。否则,请在优化之前等待应用程序中真正瓶颈的位置。
答案 3 :(得分:0)
最好的办法是分析你的脚本。
而不是可能不适用于特定情况的理论答案,你得到一个真正的答案,这是非常有益的。
此外,有了这个习惯,你将能够:
我个人开发。在Windows上并在* nix上部署。
在我的dev dox上,我使用xdebug + WinCacheGrind来读取结果。
没有他们我就活不下去。 :)
http://elrems.wordpress.com/2008/02/12/profiling-php-with-xdebug-and-wincachegrind/
答案 4 :(得分:0)
我认为上传部分不应该是您调整图像大小的位置。您应该在以后作为cron作业调整图像大小。您可以使用第三方应用程序(如imagemagick)或其他一些调整大小应用程序来调整图像大小。这样你就可以节省前端的时间。您可以每隔5分钟左右运行一次调整大小的作业。