Lumenは早い。まあ、これは間違いないと思うのですが、結局.env読み込んだり、FacadeやEloquent読み込んだりしたら、Laravelと同じじゃないの?と思い、計測してみました。
試したのは
##テスト条件
Lumen, Laravelともにローカル環境でビルトインサーバを立ち上げ、
php artisan serve
abコマンドで、
ab -n 100 -c 100 htpp://localhost:8000/
という条件で、下記の場合のでRequest per secondの値をチェックしてみました。
- 素のLumen
- .envをloadしたLumen
- .env + ->withFacadeをコメントインしたLumen
- .env + Facade + ->withEloquentをコメントインしたLumen
- 素のLaravel
マシンは、
iMac 2009(古め)
Core i5 2.6MHz
32GB RAM
SSD
まあ、SSDなので、同型番のマシンよりは少々早いかなと。
##結果
###素のLumen
Requests per second: 107.17 [#/sec] (mean)
早いか、遅いかはわかりませんが、まあ、1つの基準値。
###.evnをloadしたLumen
Requests per second: 103.04 [#/sec] (mean)
まあ、処理が増えた分、少し低下
###.env + ->withFacadeをコメントインしたLumen
Requests per second: 88.51 [#/sec] (mean)
結構下がりました。
###.env + Facade + ->withEloquentをコメントインしたLumen
ガクンときました。スピード重視ならそもそもquerybuilder使ったほうがいいのかも。
Requests per second: 53.20 [#/sec] (mean)
###素のLaravel
Requests per second: 15.18 [#/sec] (mean)
遅っ!。まあ、Lumenが早いということで。。。
##まとめ
まあ、突っ込みどころは多いですが、相対的には一定の参考値は得られたかなと。
開発の生産性に大きく影響する.env, Facade, Eloquentを読み込んだ場合でも、速度は低下するとはいえ、Laravelの3倍以上早い(3倍のトラフィックをこなせる)ので、Lumenを利用する意味はあるかなと。
今度はもっと実用的なコードでテストしてみたいと思います。
##参考値(追記)
その後、LumenでDBアクセスして、bladeで出力するサンプルを書いてみました。その結果は、
###Lumen + QueryBuilder
Requests per second: 29.41 [#/sec] (mean)
少なくとも素のLaravelより早い。
###Lumen + Eloquent
Requests per second: 25.23 [#/sec] (mean)
QueryBuilderに比べれば落ちるが、素のLaravelよりは早い。
###巣のHello World
素のPHPのHello Worldを試してみた。
Requests per second: 11664.53 [#/sec] (mean)
うーん。1万以上。ここまで違うなら普通のAPI作るならオールドスタイルで書くのがいいのかな。