💭
Laravel10とCodeIgniter4とのレスポンスタイムをざっくり比較してみる
はじめに
「CodeIgniterって軽量で高速」というイメージがあったのですが、気になってみたので実際にLaravelと比較してどれくらい速いのかを検証してみようと思います。
- MacBook Air 2020 Apple M1 16GBメモリ
- MacOS Sonoma 14.0
- kool.devでDocker開発環境構築
- PHP 8.2
- MySQL 8.0
- Laravel 10.2.10
- CodeIgniter 4.4.3
- 同じ最適化をする
composer install --optimize-autoloader --no-dev
- ApacheBenchで計測
- 以下のシナリオで検証
- コントローラークラスで素朴に
echo 'HELLO WORLD';
- 10000レコードある
products
テーブルを作成しておき、コントローラークラスで全件取得 - 10000レコードある
products
テーブルを作成しておき、コントローラークラスでランダムにID指定して1レコード取得するのを100回行う - 10000レコードある
products
テーブルを作成しておき、カテゴリIDで絞り込んで検索 - 10000レコードある
products
テーブルを作成しておき、商品名でLIKE検索 -
products
テーブルとcategories
テーブルをjoin して全件取得
- コントローラークラスで素朴に
※同じDBデータで検証するため、Laravelでシーディングしたデータを流用
echo 'HELLO WORLD';
コントローラークラスで素朴に Laravelのコントローラークラス
app/Controllers/BenchmarkController.php
~~~
public function echoHelloWorld()
{
echo 'HELLO WORLD';
}
~~~
CodeIgniterのコントローラークラス
app/Controllers/Benchmark.php
~~~
public function echoHelloWorld()
{
echo 'HELLO WORLD';
}
~~~
ab -n 1000 -c 10 -l http://localhost/benchmark/echo_hello_world
Requests per second | |
---|---|
Laravel10 | 30.82/sec |
CodeIgniter4 | 72.80/sec |
products
テーブルを作成しておき、コントローラークラスで全件取得
10000レコードあるLaravelのコントローラークラス
app/Controllers/BenchmarkController.php
~~~
public function productsFindAll()
{
$products = Product::all();
}
~~~
CodeIgniterのコントローラークラス
app/Controllers/Benchmark.php
~~~
public function productsFindAll()
{
$productsModel = model(Products::class);
$products = $productsModel->findAll();
}
~~~
ab -n 1000 -c 10 -l http://localhost/benchmark/products_findall
Requests per second | |
---|---|
Laravel10 | 21.49/sec |
CodeIgniter4 | 47.40/sec |
products
テーブルを作成しておき、コントローラークラスでランダムにID指定して1レコード取得するのを100回行う
10000レコードあるLaravelのコントローラークラス
app/Controllers/BenchmarkController.php
~~~
public function productRandom100()
{
$products = [];
for ($i=0; $i < 100; $i++) {
$products[] = Product::where('id', rand(1, 10000))->get();
}
}
~~~
CodeIgniterのコントローラークラス
app/Controllers/Benchmark.php
~~~
public function productRandom100()
{
$productsModel = model(Products::class);
$products = [];
for ($i=0; $i < 100; $i++) {
$products[] = $productsModel->where('id', rand(1, 10000))->first();
}
}
~~~
ab -n 1000 -c 10 -l http://localhost/benchmark/product_random_100
Requests per second | |
---|---|
Laravel10 | 24.88/sec |
CodeIgniter4 | 49.77/sec |
products
テーブルを作成しておき、カテゴリIDで絞り込んで検索
10000レコードあるLaravelのコントローラークラス
app/Controllers/BenchmarkController.php
~~~
public function productsWhereCategoriesId(int $category_id)
{
$products = Product::where('category_id', $category_id)->get();
}
~~~
CodeIgniterのコントローラークラス
app/Controllers/Benchmark.php
~~~
public function productsWhereCategoriesId(int $category_id)
{
$productsModel = model(Products::class);
$products = $productsModel->where('category_id', $category_id)->findAll();
}
~~~
ab -n 1000 -c 10 -l http://localhost/benchmark/products_where_categories/100
Requests per second | |
---|---|
Laravel10 | 28.48/sec |
CodeIgniter4 | 57.08/sec |
products
テーブルを作成しておき、商品名でLIKE検索
10000レコードあるLaravelのコントローラークラス
app/Controllers/BenchmarkController.php
~~~
public function productsLikeKeyword(string $keyword)
{
$products = Product::where('name', 'LIKE', '%'.$keyword.'%')->get();
}
~~~
CodeIgniterのコントローラークラス
app/Controllers/Benchmark.php
~~~
public function productsLikeKeyword(string $keyword)
{
$productsModel = model(Products::class);
$products = $productsModel->like('name', $keyword)->findAll();
}
~~~
ab -n 1000 -c 10 -l http://localhost/benchmark/products_like_keyword/a
Requests per second | |
---|---|
Laravel10 | 24.24/sec |
CodeIgniter4 | 52.88/sec |
products
テーブルとcategories
テーブルをjoin して全件取得
Laravelのコントローラークラス
app/Controllers/BenchmarkController.php
~~~
public function productsJoinCategories()
{
$products = Product::query()->with('category')->get();
}
~~~
CodeIgniterのコントローラークラス
app/Controllers/Benchmark.php
~~~
public function productsJoinCategories()
{
$productsModel = model(Products::class);
$products = $productsModel->join('categories', 'categories.id = products.category_id', 'inner')->findAll();
}
~~~
ab -n 1000 -c 10 -l http://localhost/benchmark/products_join_categories
Requests per second | |
---|---|
Laravel10 | 17.76/sec |
CodeIgniter4 | 35.75/sec |
Discussion