LumenというLaravelのコンポーネントを利用したフレームワークが出たので、ちょっと触ってみました。
LumenはSilexやSlimに比べてREQUESTS PER SECONDの値が高いらしいですね。
なので、今回はsiegeコマンドを利用してそれらのベンチを取ってみました。
利用したレポジトリはこちらです。
※ベンチそんな取ったことないんで分析甘いかもしれませんがご了承いただきたいです。
Slim
Slim Framework
Silex
Homepage - Silex - The PHP micro-framework based on Symfony2 Components
流れ
- それぞれインストール
- 環境について
- siegeコマンド実行
- 所感
1.それぞれインストール
一応マイクロフレームワークらしいですが、
インストールはどれくらいかかるのでしょうか。
標準出力をそのままコピってみました。
※Lumenは composer create-project laravel/lumen --prefer-distを行ったあと、
vendorを消して、composer installしました。
Lumenインストール
https://gist.github.com/tarata/e51138cc3d1575bf034f
Silex インストール
https://gist.github.com/tarata/555b27d621a1c91a7606
Slim インストール
https://gist.github.com/tarata/63c84364dc388dadcb6f
Lumen長っ!
Slim短っ!!
これほんとにマイクロなんだろうか。
2.環境について
テスト環境についてです。
個人のさくらVPS上に乗っけて、PHPのビルトインサーバでそれぞれ起動してsiegeにかけてみました。
Lumenはデフォルトのwelcomeページ
SilexはHello Silexという文字のみ
SlimもHello Slimという文字のみ
siegeコマンドについてはこちらなどを参考に・・・
さくらVPS
- メモリ 1 GB
- ディスクHDD 100 GB
- CPU 2コア
PHP
$php -v PHP 5.4.39 (cli) (built: Mar 20 2015 08:10:43) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
※ siegeの対象にlocalhostにsiegeがなぜか使えなかったので
/etc/hostsに下記のように書いて対応
127.0.0.1 silex.local.com 127.0.0.1 slim.local.com 127.0.0.1 lumen.local.com
ちなみにこんなエラーが出ました。
$siege -g http://localhost:8000/ [error] socket: -928823552 connection refused.: Connection refused
3.siege実行
Transaction rateの値をとりあえず見ていこうかと思います。
Lumen
$siege -c 10 -t10s http://lumen.local.com:8000/ Transactions: 181 hits Availability: 100.00 % Elapsed time: 9.20 secs Data transferred: 0.25 MB Response time: 0.04 secs Transaction rate: 19.67 trans/sec Throughput: 0.03 MB/sec Concurrency: 0.86 Successful transactions: 181 Failed transactions: 0 Longest transaction: 0.13 Shortest transaction: 0.01 $siege -c 1000 -t10s http://lumen.local.com:8000/ Transactions: 608 hits Availability: 100.00 % Elapsed time: 9.18 secs Data transferred: 0.82 MB Response time: 2.15 secs Transaction rate: 66.23 trans/sec Throughput: 0.09 MB/sec Concurrency: 142.45 Successful transactions: 608 Failed transactions: 0 Longest transaction: 8.99 Shortest transaction: 0.00
なるほどなるほどー
1個目なのでよくわからないですね。
Silex
$siege -c 10 -t10s http://silex.local.com:8000/ Transactions: 155 hits Availability: 100.00 % Elapsed time: 9.52 secs Data transferred: 0.00 MB Response time: 0.11 secs Transaction rate: 16.28 trans/sec Throughput: 0.00 MB/sec Concurrency: 1.79 Successful transactions: 155 Failed transactions: 0 Longest transaction: 0.42 Shortest transaction: 0.03 $siege -c 1000 -t10s http://silex.local.com:8000/ Transactions: 254 hits Availability: 100.00 % Elapsed time: 9.90 secs Data transferred: 0.00 MB Response time: 4.09 secs Transaction rate: 25.66 trans/sec Throughput: 0.00 MB/sec Concurrency: 104.92 Successful transactions: 254 Failed transactions: 0 Longest transaction: 9.32 Shortest transaction: 0.00
お、Silexちょっと負けましたね。
Slim
$siege -c 10 -t10s http://slim.local.com:8000/ Transactions: 182 hits Availability: 100.00 % Elapsed time: 9.63 secs Data transferred: 0.00 MB Response time: 0.04 secs Transaction rate: 18.90 trans/sec Throughput: 0.00 MB/sec Concurrency: 0.72 Successful transactions: 182 Failed transactions: 0 Longest transaction: 0.15 Shortest transaction: 0.01 $siege -c 1000 -t10s http://slim.local.com:8000/ Transactions: 585 hits Availability: 100.00 % Elapsed time: 9.42 secs Data transferred: 0.01 MB Response time: 2.18 secs Transaction rate: 62.10 trans/sec Throughput: 0.00 MB/sec Concurrency: 135.40 Successful transactions: 585 Failed transactions: 0 Longest transaction: 8.75 Shortest transaction: 0.02
Slimはやはり特になにも入ってないので強いですね。
concurrency 10の時
Lumen 19.67 trans/sec
Silex 16.28 trans/sec
Slim 18.90 trans/sec
concurrency 1000の時
Lumen 66.23 trans/sec
Silex 25.66 trans/sec
Slim 62.10 trans/sec
Silexがダメなように見える・・・w
確かにLumen多くさばけそうですね。
4. 所感
なんとなく試してみたかったので、ベンチ取ってみました。
回数そんな多くやってないので、正しいものがとれたかどうか確実ではないですが、ほとんど何も入っていないSlimと近いスピードなので、Lumenのホームページ上で言ってることは本当なのかなと思います。
インストール時に色んな物が突っ込まれていたので、本当にマイクロフレームワークなのかちょっとわからないですが、なにかあるときはちょっと触ってみようかなと思います。