eAccelerator/APC/Xcacheのパフォーマンス比較(オブジェクト絡み)
PHP5系を対象にしたテストなのに、オブジェクト絡みの処理を比較していなかったので追加 :-)
組み込みクラスのstdClassとPHPコードで定義したクラスに対して
- インスタンス生成
- setメソッド
- getメソッド
- クラス定数の取得
- 継承・実装した場合
といった内容のテスト用コード(md5:583e400c21954010cf43778c56156d31)を作って、同様に実行時間を計測しました。
で、グラフと生データは以下の通り。グラフ、ますます見づらくなってスミマセン。。。
none | ea(opt=0) | ea(opt=1) | apc | xcache | |
---|---|---|---|---|---|
new_stdclass | 4.253 | 3.882 | 3.981 | 5.379 | 4.364 |
new_testclass | 4.948 | 4.862 | 4.830 | 4.884 | 5.069 |
new_singletonclass | 5.416 | 5.454 | 5.445 | 5.478 | 6.220 |
new_testfinalclass | 5.311 | 5.188 | 5.152 | 5.183 | 5.240 |
new_testclassimplementstestinterface | 6.068 | 5.919 | 5.839 | 5.900 | 5.966 |
new_testclassextendstestabstractclass | 5.989 | 6.076 | 5.912 | 6.051 | 5.956 |
set_stdclass | 2.137 | 2.175 | 2.182 | 2.164 | 2.145 |
set_testclass | 5.428 | 5.406 | 5.493 | 5.418 | 5.409 |
set_singletonclass | 5.632 | 5.654 | 5.529 | 5.631 | 5.659 |
set_testfinalclass | 5.621 | 5.638 | 5.483 | 5.586 | 5.628 |
set_testclassimplementstestinterface | 5.510 | 7.086 | 5.383 | 5.506 | 5.536 |
set_testclassextendstestabstractclass | 5.377 | 5.395 | 5.273 | 5.720 | 5.390 |
get_stdclass | 1.142 | 1.155 | 1.084 | 1.136 | 1.154 |
get_testclass | 2.454 | 2.499 | 2.287 | 2.466 | 2.532 |
get_singletonclass | 2.512 | 2.495 | 2.342 | 2.539 | 2.636 |
get_testfinalclass | 2.486 | 2.534 | 2.309 | 2.496 | 2.530 |
get_testclassimplementstestinterface | 2.490 | 2.519 | 2.313 | 2.521 | 2.538 |
get_testclassextendstestabstractclass | 2.423 | 2.475 | 2.251 | 2.438 | 2.472 |
constant_testclass | 0.958 | 0.954 | 0.940 | 0.959 | 0.949 |
constant_singletonclass | 1.025 | 1.044 | 0.975 | 1.044 | 1.041 |
constant_testfinalclass | 1.031 | 1.036 | 1.002 | 1.035 | 1.045 |
constant_testclassextendstestabstractclass | 1.515 | 1.476 | 1.412 | 1.468 | 1.464 |
Total | 79.728 | 80.923 | 77.419 | 81.001 | 80.941 |
結果、extensionによる効果やextensionの優位性はあまり見られませんでした。数回試してみましたが、eAccelerator(optimize=1)が若干早いかなぁ、という程度ですが、ほとんど誤差範囲と思います。現状では、OOに対してあまり最適化されない(していない?)んでしょうかね。
あと、だいたい予想通りですが
- メンバー変数へのアクセスはメソッド経由しない方(publicメンバーに直接アクセス)が早い
- 継承・実装したクラスは、インスタンス生成・定数へのアクセス共に遅くなる
- メンバー変数へ値を設定する処理は遅い。逆に参照は早い
といったところも見えますね。