比較対象は、実装の元ネタの__と、同じくPHP Adventで発表されたarryです。
また比較用のコードとデータはarryで使われていた「悲しき今シーズンの結果」を利用させてもらいました。ありがとうございました。
◆まずはリファクタリングから
が、利用するにはsortがないし、クラスは二つに分かれてるし。
最初は_wwのリファクタリングから始めました。
まずはgitでブランチを切って、開発開始です。
次にテストクラスを作成してから、さくっとクラスをマージ。
簡単に出来ました。テストがあると、変更するのに気が楽ですね。
◆速度比較について予測してみる
測定する前に予測を立てます。
まずは、自分の_wwが一番遅いと予想。
理由はマジックメソードを使っているので。
一番早いのはShinさんのarryクラス。
最初からチェーンするようにメソードが組み立てられているので、一番早いはず。
すると中間は、Underscore.php。
これもマジックメソード使ってないけれど、各メソード内での処理があるので、チェーンすると少し処理が増えると予想。
◆速度比較の結果
ソースコードはgistで公開してあります。
インストールですが、どこかのフォルダーでgit bashを開始して、
git clone git://gist.github.com/1460352.git gist-1460352と打ち込んで、からgist-1460352内のcompare.phpを走らせてください。
git clone git://github.com/shin1x1/arry.git
git clone git://github.com/brianhaveri/Underscore.php.git
git clone git://github.com/asaokamei/_ww.git
測定ですが、Core2Duo 2.13GHzのWindows Vistaでの結果です。
2.2504210472107 // 素のPHP 5.0997409820557 // arry 9.1629009246826 // Underscore.php 7.959762096405 // _ww
予想通りarryが一番早かったです。
素のPHPに比べて2倍強になりました。結構、速い気がします。
意外だったのがUnderscore.phpより_wwのほうが速かったこと。
何度か走らせると、値が結構変わるので「ほんの少し速い」だけですが、各メソード内での処理が意外と重いのでしょう。
◆PHPのプロファイリング
そういえばプロファイリング(速度の測定)なんて何年振りです。
PHPだとxdebugを使えば出来るようですが、今回は簡単な関数を自作して計ることにしました。最近使い始めたNetBeansから直接測定結果が見られると便利なんですけどね。
0 件のコメント:
コメントを投稿