题
我在 PHP 中有一个函数可以将图像大小调整为缩略图,我的图像上传脚本采用上传的图像并运行此函数来调整图像大小(如果图像比 700px 宽),然后还运行该函数 2 次以上以创建 2 个不同大小的缩略图图片,因此用户每次上传图片时总共会保存3张图片。我的调整大小/缩略图函数会针对缩略图调用两次,如果文件尺寸过宽,偶尔会调用第三次。
现在这个调整大小函数使用 getimagesize( ) 来获取尺寸,所以我的 uplaod 脚本调用这个函数,然后调整大小函数再使用 getimagesize( ) 函数 2-3 次来制作其他大小的图像。
我想我应该将尺寸传递给调整大小函数,因为我在上传过程中得到了它们?
我真正的问题是, getimagesize( ) 是一个资源匮乏的函数吗?最好至少尽可能使用它,还是在上传 1 个图像时调用它几次?
解决方案
只是一个提示/ precausion,我asssume你使用GD功能。当创建一个以上的缩略图,通常的瓶颈被错误执行图像缩放功能 - 每次读取原始图像,然后保存调整大小之一。更好的办法是将加载图像,并使用图像资源,以与imagecopyresampled
所有缩略图 - 不仅通过图像功能的dimentions - 也通过GD参考。大公方式原始文件被加载一次。
其他提示
对于只运行在上载的东西,它不应该理会那么多。上传不到哪用户期望超快响应行动。 过早的优化是所有罪恶的根源
话虽这么说,getimagesize()
不是特别昂贵,但如果你可以把它只有一次这样做。但我不预测多的速度增加。脚本的昂贵的部分是,图像尺寸本身。
它没有特别的资源饥饿 - 它必须打开一个文件,并读出的图像标头。
不要走出自己的方式来优化它拿走 - 如果它很容易,做到这一点。否则,观望,其中的真正的瓶颈是在您的应用程序优化之前。
最好的办法是分析您的脚本。
您得到的不是可能不适用于特定情况的理论答案,而是真正的答案,而且确实很有启发性。
此外,有了这个习惯,你将能够:
- 发现瓶颈
- 区分微观优化和主要优化。
我个人开发。在 Windows 上并在 *nix 上部署。
在我的开发 dox 上,我使用 xdebug + WinCacheGrind 来读取结果。
没有他们我就活不下去。:)
http://elrems.wordpress.com/2008/02/12/profiling-php-with-xdebug-and-wincachegrind/
我不认为上载的部分应该是你调整图像大小。你应该在以后的时间作为cron作业调整图像大小。您可以使用像ImageMagick的或其他一些调整大小的应用程序调整图像的第三方应用程序。这样,你节省前端时间。您可以运行调整大小作业每5分钟左右。