- 2006-10-17 (火) 22:55
- PHP
以前のエントリでもあったようにPHPのオブジェクトは配列より遅いという印象があります。
実際にどの程度違いがあるかをPHP4/5で計ってみました。
計測方法
各ソースを100回実行した平均を出しています。実行環境はPHP4は4.4.4、PHP5は5.1.6(共にCLI版)です。実行時間の計測にはPEAR::Benchmark_Timerを使いました。
各ソースでは配列、Hogeクラス(オブジェクト変数なし)、Hoge2クラス(オブジェクト変数あり)を計測しています。なおHoge/Hoge2クラスは以下になります。
1 2 3 4 5 6 7 8 9 | < ?php class Hoge { } class Hoge2 { var $id ; var $name ; } ?> |
生成
配列・オブジェクトを1000回生成しています。[ソース]
PHP4
実行時間 | 比率 | |
---|---|---|
array | 0.000901 | 1.000000 |
object | 0.001261 | 1.399353 |
object2 | 0.001592 | 1.767612 |
PHP5
実行時間 | 比率 | |
---|---|---|
array | 0.000334 | 1.000000 |
object | 0.000721 | 2.156477 |
object2 | 0.000974 | 2.913505 |
やはり配列よりオブジェクトの方が遅いですね。オブジェクト同士でもオブジェクト変数を定義してある方が遅くなっています。
意外だったのがPHP4と5で速度比率の差が大きいことです。配列、オブジェクト共にPHP5の方が速いのですが、オブジェクトに比べて配列が圧倒的に速くなっているため速度差が大きくなっています。
書き
既に作成されている配列・オブジェクトに2つの値を1000回設定しています。[ソース]
PHP4
実行時間 | 比率 | |
---|---|---|
array | 0.001422 | 1.000000 |
object | 0.001336 | 0.939508 |
object2 | 0.001325 | 0.932387 |
PHP5
実行時間 | 比率 | |
---|---|---|
array | 0.000593 | 1.000000 |
object | 0.000761 | 1.283243 |
object2 | 0.000852 | 1.437950 |
「生成」ほどの速度差はありませんでしたが、PHP4では若干配列が遅く、PHP5ではオブジェクトが遅かったです。ここでもPHP5の方が速度差が大きいですね。PHP5ではobject2(オブジェクト変数あり)の方が遅いのはなぜなのでしょう。(オブジェクト変数が定義されている方が速いような気がするのですが)
読み
既に作成されている配列・オブジェクトの2つの値を1000回取得しています。[ソース]
PHP4
実行時間 | 比率 | |
---|---|---|
array | 0.001971 | 1.000000 |
object | 0.001867 | 0.947329 |
object2 | 0.001859 | 0.943242 |
PHP5
実行時間 | 比率 | |
---|---|---|
array | 0.000710 | 1.000000 |
object | 0.000771 | 1.086580 |
object2 | 0.000854 | 1.202299 |
「生成」「書き」に比べてほとんど差はありませんね。ただ「書き」と同じくPHP5のobject2は若干遅いです。
Recordset
DBから値を読むシーンを想定して、生成・書き・読みを1000回繰り返しています。[ソース]
PHP4
実行時間 | 比率 | |
---|---|---|
array | 0.003775 | 1.000000 |
object | 0.003988 | 1.056424 |
object2 | 0.004052 | 1.073377 |
PHP5
実行時間 | 比率 | |
---|---|---|
array | 0.001730 | 1.000000 |
object | 0.002057 | 1.189017 |
object2 | 0.002616 | 1.512139 |
こうして見るとPHP4/5共に配列でもオブジェクトでもそれほど差がありませんね。ただやはりPHP5のobject2だけが遅いのが気になります。
生成以外は配列とオブジェクトでそれほど差が生まれなかったのは意外でした。ただ以前DBから大量のレコードセットを配列に格納した場合とオブジェクトに格納した場合で大きなパフォーマンス差が生まれた事があったので、メモリ消費量など実行時間以外の要素で差があるのかもしれません。こちらもまた検証してみたいですね。
# PHP4と5でおおよそ2倍程度のパフォーマンス差がありました。PHP5を使う理由がまた一つ増えましたね。はい。
- Newer: Shibuya.pm テクニカルトーク #7
- Older: 携帯キャリアIPアドレス
トラックバック:1
- このエントリーのトラックバックURL
- /blog/2006/10/php_bench_object_array.html/trackback
- Listed below are links to weblogs that reference
- PHPオブジェクトは配列より遅いか from Shin x blog
- trackback from HotPHPPER News 06-11-10 (金) 2:53
-
オブジェクト操作と配列操作の速度比較…
Shin x blogで「PHPオブジェクトは配列より遅いか | Shin x blog」という題名でPHPのオブジェクト操作と配列の操作速度を比較した結果が公開されて (more…)