AspectMockで引数の値によりモックの動作を変更する

AspectMockで、引数の値によりモックが返す値を変更したい場合、以下のようにします。

\AspectMock\Test::double('Fuel\Core\Config', ['get' => function ($arg) {
    if ($arg === 'foo.bar') {
        return 'foo.bar';
    } else {
        return 'baz';
    }
}]);

また、引数の値により、モックではなく実際のメソッドを実行させたい場合は、以下のようにします。

\AspectMock\Test::double('Fuel\Core\Config', ['get' => function ($arg) {
    if ($arg === 'foo.bar') {
        return 'foo.bar';
    } else {
        // モックせずに実際のメソッドを実行させる
        return __AM_CONTINUE__;
    }
}]);

関連

Tags: aspectmock, phpunit, testing, fuelphp

SymfonyとLaravelでは果たしてどちらが軽量高速なのか?

Symfony 2.5.0とLaravel 4.2.1をベンチマークしてみました。

ベンチマーク環境

  • XAMPP 1.8.3-4 for Linux (32bit)
    • PHP 5.5.11
      • Zend OPcache v7.0.4-dev
    • Apache 2.4.9

ベンチマーク方法

いわゆる「Hello World」ベンチマークです。フレームワークの最小のオーバーヘッドを計測するためのものになります。詳細はソースコード(後述)をご覧ください。

以下のようなコマンドで計測しました。

$ siege -b -c 10 -t 3S http://localhost/symf/hello?name=BEAR

ベンチマーク結果

Symfony Laravel
trans/sec 193.82 175.79
relative(%) 100.0% 90.7%

1秒間に処理できたリクエスト数です。多い方がよい値です。

Symfony Laravel
peak memory (MB) 1.00 1.25
relative(%) 100.0% 125.0%

memory_get_peak_usage(true)で取得したピーク時のメモリ使用量です。

コメント

「軽量」を使用メモリが少ないこと、「高速」を処理速度が速いことと定義した場合、このベンチマークでは、軽量なのはSymfonyであり、高速なのもSymfonyでした。それほど大きな差はありませんが。

漠然とLaravelの方が軽量高速だろうと思っていましたが、先入観というのはよくないですね。

なお、もし、このようにチューニングしたほうがよいということがありましたら、BitbucketのIssuesやPull Requestでお知らせいただければ、適用して再度計測してみます。

ソースコード

関連

Tags: php, symfony, laravel, benchmark

2014年の最新PHPフレームワークをベンチマークしてみる

CodeIgniter 3.0-dev、FuelPHP 1.7.2-dev、CakePHP 3.0.0-dev3、BEAR.Sunday 0.10.5、Laravel 4.2.1の5つの最新PHPフレームワークをベンチマークしてみました。

(2015-03-26 追記) 9つのフレームワークをベンチマークした「2015年最新PHPフレームワーク(9つ)のベンチマーク」をアップしました。

(2014-11-27 追記) 7つのフレームワークをベンチマークした「2014年の最新PHPフレームワークをベンチマークしてみた」をアップしました。

なお、Symfony、Zend Framework、Phalcon、Yii、Auraなども入れたいところですが、力尽きました。あしからず、ご了承願います。

ベンチマーク環境

  • XAMPP 1.8.3-4 for Linux (32bit)
    • PHP 5.5.11
      • Zend OPcache v7.0.4-dev
    • Apache 2.4.9

ベンチマーク方法

いわゆる「Hello World」ベンチマークです。フレームワークの最小のオーバーヘッドを計測するためのものになります。詳細はソースコード(後述)をご覧ください。

以下のようなコマンドで計測しました。

$ siege -b -c 10 -t 3S http://localhost/bear/hello?name=BEAR

ベンチマーク結果

CodeIgniter FuelPHP CakePHP BEAR.Sunday Laravel
trans/sec 881.53 396.08 418.03 268.62 173.07
relative(%) 100.0% 44.9% 47.4% 30.5% 19.6%

1秒間に処理できたリクエスト数です。多い方がよい値です。

CodeIgniter FuelPHP CakePHP BEAR.Sunday Laravel
peak memory (MB) 0.25 0.5 0.5 0.75 1.25
relative(%) 100.0% 200.0% 200.0% 300.0% 500.0%

memory_get_peak_usage(true)で取得したピーク時のメモリ使用量です。

コメント

この中では、やはりCodeIgniter3が速かったです。OPcacheをonにしたら、このように圧倒的に速くなりました。恐るべし、CodeIgniter!

また、CakePHP3がFuelPHP 1.xよりも少しだけ速かったことに驚きました。OPcacheをoffにすれば、FuelPHPの方が速かったのですが。

なお、もし、このようにチューニングしたほうがよいということがありましたら、BitbucketのIssuesやPull Requestでお知らせいただければ、適用して再度計測してみます。

ソースコード

関連

Tags: php, fuelphp, codeigniter, bear, cakephp, laravel, benchmark