先日仕事でDBから取ってきた値のリストをXMLで出力するのに、重複のない配列を作りたくて、PHPでこんな感じのプログラムを書いた。$array[$row[0]]++;}もちろん取得要素が1つだけならDB側でグループ化すればいいんだけど、実際には取得要素が3つくらいあったのでそれはできない。例は簡単のために1つにした。元のコードがかなり入り組んでいて高速化を狙ってこう書き換えたんだけど、実行してみるとどうにも遅い。ブラウザ上で体感できるほど明らかに遅い。いうわけで、少しベンチマークをとってみたわけです。Rubyで、環境は全部FastCGI。サンプルコードはそれぞれこんな感じ。1endこれらをそれぞれ、abコマンドで5回ずつやって実行時間を比べてみる。したところ、以下の表のようになった。240msPerlとRubyにも2倍以上の速度差が見られたが、PHPは明らかに遅い。1;のように1を代入するだけの形にすると182msまで速くなった。そこでエラーの処理に時間がかかってるのかもしれないと思い、PHPのコードを少し書き換えてみる。1;}こうやってみると303msになった。エラー処理にかなり時間を食っていたらしい。ここまでやったPHPのコードは他の2つに比べて明らかに醜い。個人的には今勉強中でひいき目に見る部分もあるにせよ、Rubyのコードが一番すっきりしていてわかりやすいと思う。速度的にはPerlに及ばない部分もあるが、100000回やって0.1秒程度の差なので特に問題はないだろう。書いてみたところソースがきれいになる傾向があるので、使っていくに従って保守の面などで差が出てくるように思う。それに国産言語なので日本語処理が充実しているのもありがたい。実際ちゃんと書いてみるとPHPも遅いわけではなかったが。それに今回は出現頻度をカウントする必要はないので、1を代入した速度をPHPの速度と考えることもできるし。PHPは他を圧倒する膨大な組み込み関数群を持っているにも拘わらず、意外と簡単なことが簡単にできない。考えなしに機能を組み込みすぎなんだよなぁ、きっと・・・。PHPの配列は遅いかもしれないので気をつけましょう、ということでした。いったものは画像に変換します。ロボットからの自動的なコメントスパムを防ぐために、画像の下の入力ボックスに適切な文字列を入力してください。文字列が一致する場合のみ、コメントが送信されるでしょう。サポートし、受け入れることを確認してください。なければ、コメントを正確に確認することができません。15:12コメント:感謝をこめていただきます。