【发布时间】:2012-12-26 00:29:09
【问题描述】:
以下 PHP 代码确实返回了大约 3.5 秒的运行时间(多次测量并取平均值):
$starttime = microtime(true);
exec('/usr/local/bin/convert 1.pdf -density 200 -quality 85% 1.jpg');
$endtime = microtime(true);
$time_taken = $endtime-$starttime;
当我在 ssh 终端上运行相同的命令时,运行时间减少到大约 0.6 秒(使用命令行工具 time 测量)。
imagemagick 库的版本是
Version: ImageMagick 6.7.0-10 2012-12-18 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP
这个时差的原因是什么?
stackoverflow 上类似问题的一个答案是,开销来自 Web 服务器必须启动线程/shell。这真的是原因吗?我认为线程是轻量级的,启动/终止不需要很长时间。
在调用exec 之前,我使用exec('env MAGICK_THREAD_LIMIT=1'); 将imagemagick 使用的线程数(因为这是/现在是OpenMP 中的一个错误?Reference)设置为1。无论我为MAGICK_THREAD_LIMIT 设置什么值,PHP 的运行时都没有太大变化。无论如何,在这个版本中似乎没有 OpenMP 的错误,因为命令行执行的运行时是好的。
任何关于我如何改进上述命令的运行时间的建议将不胜感激。
非常感谢您的帮助。
【问题讨论】:
-
我不知道你是否知道,但你的 PHP 版本很可能有 ImageMagick 扩展:php.net/imagick
-
我通过命令行运行它的原因是因为 php.ini 内存限制。考虑到运行时,使用 ImageMagick 扩展是否更好?
-
@nkr PHP::GD 作为默认 Web 服务器配置比 PHP::imagick 更常见。
-
@MihaiStancu:我听说 GD 提供的图像质量很差,因为@Philipp 说他尝试通过
exec使用 ImageMagick,他应该尝试将它与 PHP 扩展一起使用。但总的来说,你是对的,GD 更频繁地可用。
标签: php performance runtime exec