PHP用のベンチマークツールを作りました

こちらの記事に影響を受けて、参考にさせていただきながら自分でも作ってみました。

PHP 用ベンチマーキングフレームワーク Joshimane というのを作った

自分はなかなかいい名前が思いつかなかったので Benchy にしました。

https://github.com/ackintosh/benchy

PEAR::Benchmarkと比べるとモダンな感じかなぁと思っています。

シンプルさと拡張性の高さをウリにできるように考えました。

インストール

もちろんComposerでインストールできます。

{
  "require": {
    "ackintosh/benchy": "dev-master"
  }
}
$ php composer.phar install

使い方

<?php
require_once 'vendor/autoload.php';
$reporter = Ackintosh\Benchy::run(function ($reporter) {
    // do something
    echo $reporter->time->elapsed() . PHP_EOL;
    // do something
    echo $reporter->time->elapsed() . PHP_EOL;
}, 1000); // runs 1,000 times.(default : 1 )
echo 'total : ' . $reporter->time->total() . PHP_EOL;
echo 'average : ' . $reporter->time->average() . PHP_EOL;

これで途中経過の時間と、合計・平均時間がわかります。

拡張性

Ackintosh/Bechy/Marker ディレクトリにクラスを配置してください。

<?php
class Example extends AbstractMarker
{
        public function hoge() { 'fuga'; }
}

そうするとReporterクラスで使えるようになります。

<?php
$reporter = Ackintosh\Benchy::run(function ($reporter) {
    // do something
    echo $reporter->example->hoge();// fuga
});
echo $reporter->example->hoge();// fuga

フックポイント

  • before: ベンチマーク開始前
  • after: ベンチマーク終了後
  • before_per_laps: ベンチマーク前(毎回)
  • after_per_laps: ベンチマーク後(毎回)