ローカルの仮想環境で各PHPフレームワークのベンチマークを測定しました。以下はその測定結果をまとめたものです。なお、測定結果は測定する環境や条件によって異なると思います。フレームワーク選定の際は、ご自身の環境や条件で測定することをお勧めします。
##環境情報
- Ubuntu 18.04.2 LTS
- PHP/7.3.7(PHP-FPM with OPcache)
- Nginx/1.15.8
##前提条件
- "Hello World"を出力するだけのシンプルなコントローラクラスを使用する
- フレームワークに環境設定がある場合は本番環境設定にする(デバッグモードもOFF)
- オートローダーの最適化を行う 1
- フレームワークにルーティングや設定ファイルのキャッシュ機能がある場合はキャッシュを行う
##測定ツール
ツール:wrk
実行条件:スレッド数10、コネクション数10(1スレッドあたり1コネクション)
# 実行例
wrk -t10 -c10 -d10s http://localhost/hello
##測定結果
フレームワーク | GitHub スター数 |
バージョン | Requests/sec | Peak Memory 2 |
---|---|---|---|---|
Laravel | 53.8k | 5.8.29 | 6.29 | 2.59M |
Laravel (Lumen) | 1k | 5.8.11 | 38.03 | 1.03M |
Symfony | 21.3k | 4.3.2 | 3.49 | 1.92M |
Zend Framework | 5.7k | 3.0.1 | 9.48 | 1.43M |
CakePHP | 7.9k | 3.8.1 | 14.08 | 1.72M |
CodeIgniter | 17.5k | 3.1.10 | 54.10 | 0.70M |
Yii2 | 13k | 2.0.23 | 26.85 | 1.47M |
FuelPHP | 1.4k | 1.8.2 | 26.35 | 0.93M |
Phalcon | 9.8k | 3.4.4 | 199.97 | 0.67M |
ice framework | 0.3k | 1.4.1 | 108.85 | 0.67M |
Slim | 10k | 3.12.1 | 41.31 | 0.91M |
PHPixie | - | 3.13 | 6.49 | 1.19M |
StaticPHP | - | 1.1.0 | 52.08 | 0.71M |
Fat-Free Framework | 2.3k | 3.6.5 | 329.96 | 0.74M |
Siler (without Swoole) | 0.7k | 1.5.3 | 81.64 | 0.67M |
Siler (with Swoole) | 0.7k | 1.5.3 | 1698.66 | 1.56M |
#テンプレートエンジンベンチマーク(2019/08/05追記)
##環境情報
同上
##前提条件
- "Hello xxxx"を出力するだけのシンプルなビューを使用する(xxxxには変数をアサイン)
- オートローダーの最適化を行う 1
- キャッシュ機能がある場合はキャッシュを行った状態で測定する
##測定ツール
同上
##測定結果
エンジン | GitHub スター数 |
バージョン | Requests/sec |
---|---|---|---|
Latte | 0.4k | 2.5.2 | 155.61 |
Plates | 1k | 3.3.0 | 149.92 |
Smarty | 1.5k | 3.1.33 | 89.25 |
Twig | 6.2k | 2.11.3 | 89.02 |
Blade(standalone ver.) 3 | 0.3k | 1.2.2 | 43.26 |
#フレームワークベンチマーク(2019/10/30追記)
以下の言及がありましたのでOPCacheチューニング後に再計測しました。
Laravel は素だとゴミみたいに遅いけど OPCache とかでチューニング限界までやれば C エクステンションのフレームワークに体感では劣らないぐらいの速度出るよ
— mpyw🍺2年目Webエンジニア (@mpyw) October 29, 2019
opcache.memory_consumption=128
— mpyw🍺2年目Webエンジニア (@mpyw) July 26, 2019
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=16229
opcache.validate_timestamps=0
これが本気の設定
フレームワーク | チューニング前 Requests/sec |
チューニング後 Requests/sec |
---|---|---|
Laravel | 6.29 | 41.03 |
Laravel (Lumen) | 38.03 | 284.97 |
Symfony | 3.49 | 98.53 |
Zend Framework | 9.48 | 218.05 |
CakePHP | 14.08 | 125.01 |
CodeIgniter | 54.10 | 60.51 |
Yii2 | 26.85 | 49.9 |
FuelPHP | 26.35 | 42.65 |
Phalcon | 199.97 | 271.39 |
ice framework | 108.85 | 109.97 |
Slim | 41.31 | 404.37 |
PHPixie | 6.49 | 105.15 |
StaticPHP | 52.08 | 130.17 |
Fat-Free Framework | 329.96 | 340.32 |
Siler (without Swoole) | 81.64 | 427.17 |
-
https://getcomposer.org/doc/articles/autoloader-optimization.md ↩ ↩2
-
レスポンス返却直前にmemory_get_peak_usage(false) で値を取得 ↩
-
Laravelのライブラリに依存しているため遅いが、依存ライブラリのないBladeOneというのもあり、こちらの方がスループットは良い ↩