4月 16
phpで画像処理する定番といえば、組み込みのGD(PHP: GD – Manual)が定番なのだけれど、どうも処理元の画像が大きいと、非常に処理が重たい気がする。
とある画像データベースサイトでは、デジカメで撮影した画像を大量にアップロード・リサイズする必要があり、GDで処理していたのだが、最近のデジカメは1ファイルが12~15Mバイトもめずらしくなく、コレを何十枚と処理していくと、結局、apacheさんの負荷およびCPUの負荷がハンパなく、すぐにLoad avgが急上昇してしまう。
なんとか改善できないかと考えて、サーバがMac(OS X)だから、sipsコマンド【Scriptable Image Processing System(スクリプト可能イメージ処理システム)】が使えないかと考えた。変換処理をコマンドに任せることでapache(httpd)の負荷も減らせるかもしれないし。
- sips 公式テクニカルノート Technical Note TN2035: ColorSync on Mac OS X
- SIPS コマンド – 画像をコマンドラインで – その1 (リサイズ / 回転 / 反転 など) — — 脳みその中身-
試しにいくつかリサイズしてみたところ、体感的にはPHP/GDのリサイズより早い気がした。
気がしただけでは面白くないので、実際に簡単なサンプルを作ってベンチマークをとってみた。
つまり、SIPS vs GDである。
>>>>>続きを読む
Popularity: 13% [?]
written by ANN
4月 14
PHPでプログラムの処理速度を調べたりするのに、xdebugを使ったりするのもよいけど、手軽で簡単なのものに、PEARのbenchmarkというのがあります。
benchmarkそのものが入ってない場合は、
$ pear install Benchmark
でOK.(必要に応じてsudoで)
使い方はググればすぐサンプルがでるが、だいたいこんな感じ。
require_once 'Benchmark/Timer.php';
$t = new Benchmark_Timer();
$t->start ();
$t->setMarker( 't1' );
for($i=0;$i<10000;$i++){
// 処理
}
$t->setMarker('m2');
$t->stop();
$t->display ();
これを、ブラウザ上から実行すると、HTMLのtableにフォーマットされた結果が表示される。
↓こんな感じ
| |
time index |
ex time |
% |
| Start |
1239674031.65831000 |
- |
0.00% |
| m1 |
1239674031.65838100 |
0.000071 |
0.59% |
| m2 |
1239674031.67032200 |
0.011941 |
99.03% |
| Stop |
1239674031.67036800 |
0.000046 |
0.38% |
| total |
- |
0.012058 |
100.00% |
で、今日のTipsとして、普通にBenchmark_Timer::display()を使うと、画面上に結果が表示されてしまうので、結果を表示せずに取得する方法。
簡単。Benchmark_Timer::getOutput()もしくは、Benchmark_Timer::getProfiling()を、displayの替わりに使えばOK。
getOutput()は、上記tableと同様のHTMLコードを取得できる。
getProfiling()は、上記tableと同様のデータを連想配列として取得できる。
↓こんな感じ
Array
(
[0] => Array
(
[name] => Start
[time] => 1239674550.91492500
[diff] => -
[total] => -
)
[1] => Array
(
[name] => m1
[time] => 1239674550.91499700
[diff] => 0.000072
[total] => 0.000072
)
[2] => Array
(
[name] => m2
[time] => 1239674550.92797600
[diff] => 0.012979
[total] => 0.013051
)
[3] => Array
(
[name] => Stop
[time] => 1239674550.92806900
[diff] => 0.000093
[total] => 0.013144
)
)
なぜかPear/Benchmarkにはドキュメントが無くて、ソースを読むしかないので、Benchmark使えなねー!と思ってる人がいるかもしれないので書いてみました。
…と思ったら、結構getOutput,getProfilingの解説してるページがあった(///
重複してるだけでなく、こちらにはそれ以上の情報が無いのが辛いが、せっかくなので公開。
Popularity: 12% [?]
written by ANN