Execs определенно медленнее, чем вызов скомпилированного расширения PHP. Ext_skel - твой близкий друг.
EDIT:
Нет ничего теоретического в том, что exec медленнее встроенного расширения. Как насчет запуска strace и проверки количества системных вызовов, выполняемых exec внутри сценария PHP и вызова скомпилированного расширения.
Вот некоторые тесты:
Система: VMWARE Workstation, C2DUO E8400, 2 ГБ ОЗУ
** Выполнено 4 раза:
время ./a.php (EXEC)
реальный 0m0,944 с
пользователь 0m0.700s
sys 0m0,244s
time ./b.php (PHP EXTENSION)
реальный 0m0.268s
пользователь 0m0.212s
sys 0m0,056 с
** Выполнено 1000 раз:
время ./a.php (EXEC)
реальный 3m47.042s
пользователь 2m48.239s
sys 0m56,784s
time ./b.php (PHP EXTENSION)
реальный 3m36.631s
пользователь 2m46.922s
sys 0m49.627s
Я не думаю, что это нуждается в каком-либо объяснении. Скомпилированное расширение работает быстрее, более экологично, экономит время процессора. Считается лучше. Также с помощью расширений вы можете повторно использовать ресурсы. Что делать, если вы хотите создать 10 разных версий из одного изображения? Тогда вам не нужно каждый раз воссоздавать объект new imagick('filename');
.
time ./bx.php (РЕСУРС РЕСУРСА РАСШИРЕНИЯ PHP)
реальный 0m3.712s
пользователь 0m3.552s
sys 0m0,156s
Содержание сценария A:
#!/usr/bin/php5
<?php
for ($i=0; $i < 1000; $i++)
{
exec('/usr/bin/convert -thumbnail 150 src1.jpg dst.jpg');
}
?>
Содержание сценария B:
#!/usr/bin/php5
<?php
for ($i=0; $i < 1000; $i++)
{
$img = new imagick('src1.jpg');
$img->thumbnailImage( 150, null );
$img->writeImage('dst.jpg');
} //for
?>
Содержание скрипта bx:
#!/usr/bin/php5
<?php
$img = new imagick('src1.jpg');
for ($i=0; $i < 1000; $i++)
{
$img->thumbnailImage( 150, null );
$img->writeImage('dst.jpg');
} //for
?>
Скрипт STACKTRACE с вилками (простой запуск):
LINK
Скрипт b STACKTRACE с вилками (простой запуск):
LINK