Exec は、コンパイル済みの PHP 拡張機能を呼び出すよりも明らかに遅くなります。Ext_skel はあなたの親友です。
編集: 組み込みの拡張機能よりも exec が遅いという理論的なものはありません。strace を実行して、PHP スクリプト内の exec とコンパイルされた拡張機能への呼び出しの syscall の数を確認してください。
いくつかのベンチマークを次に示します。
システム: VMWARE ワークステーション、C2DUO E8400、2GB RAM
**4 回実行:
時間 ./a.php (EXEC)
実 0m0.944s
ユーザー 0m0.700s
システム 0m0.244s
時間 ./b.php (PHP 拡張)
実 0m0.268s
ユーザー 0m0.212s
システム 0m0.056s
**1000回実行:
時間 ./a.php (EXEC)
実際の 3m47.042s
ユーザー 2m48.239s
sys 0m56.784s
時間 ./b.php (PHP 拡張)
実際の 3m36.631s
ユーザー 2m46.922s
sys 0m49.627s
これは説明不要かと思います。コンパイルされた拡張機能はより高速に実行され、より環境にやさしく、消費する CPU 時間も少なくなります。より良いと考えられます。また、拡張機能を使用すると、リソースを再利用できます。同じ画像から 10 個の異なるバージョンを作成したい場合はどうすればよいでしょうか? new imagick('filename');
その後、毎回オブジェクトを再作成する必要はありません。
time ./bx.php (リソースを再利用する PHP 拡張機能)
実際の 0m3.712s
ユーザー 0m3.552s
システム 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