Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

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メンバーに直接アクセス)が早い
  • 継承・実装したクラスは、インスタンス生成・定数へのアクセス共に遅くなる
  • メンバー変数へ値を設定する処理は遅い。逆に参照は早い

といったところも見えますね。