人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel の laravel-responsecache で表示を10倍(?) 高速化する

● spatie/laravel-responsecache

1. インストール

composer require spatie/laravel-responsecache

2. 設定ファイルの生成

php artisan vendor:publish --provider="Spatie\ResponseCache\ResponseCacheServiceProvider"

↑ このコマンドを実行すると
/config/responsecache.php ファイルが生成されます。

3. ミドルウェアにセット

キャッシュをミドルウェア(アクセスのたびに自動的に呼び出されるクラス)にセットします。

既存の $routeMiddleware の一番最後に追加します。

app/Http/Kernel.php

protected $routeMiddleware = [
   ...
    'cacheResponse'      => \Spatie\ResponseCache\Middlewares\CacheResponse::class,         // ● 追加
   'doNotCacheResponse' => \Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class,     // ● 追加
];

次に routes/web.php のキャッシュを適応したいルートをこちらのミドルウェアで囲みます。

	Route::group(['middleware' => 'cacheResponse'], function () {
		Route::get("/", function (Request $request) {
                   // 何かしらの処理
		});
	});

以上でキャッシュは実行されています。
確認してみましょう。

● spatie/laravel-responsecache の動作を確認する。

1. .env の APP_DEBUG=true を確認する

.env の以下の記述があるか確認しましょう

APP_DEBUG=true

2. Laravel の GETメソッドでアクセスできるページへ2回アクセスしてGoogle Chrome でヘッダを見る。

● 管理画面でデータが変更されたときに自動的にキャッシュをクリアする

app/ResponsecacheTrait.php を以下の内容で新規作成します

<?php
namespace App;
use Spatie\ResponseCache\Facades\ResponseCache;

trait ResponsecacheTrait
{
    public static function bootClearsResponseCache()
    {
        self::created(function () {
            ResponseCache::clear();
        });

        self::updated(function () {
            ResponseCache::clear();
        });

        self::deleted(function () {
            ResponseCache::clear();
        });
    }
}

Laravelアプリで使用する全てのモデルファイルに以下のトレイトを追加します

例 : app/news.php に追加します

class News extends Model
{
    // ===== Trait =====
    use \App\ResponsecacheTrait;  // ● 追加
    // ===== Trait =====

これで DBにデータを「新規登録」「変更」「削除」したときにキャッシュがクリアされます。

● spatie/laravel-responsecache の効果をベンチマーク

こちらのコマンドで実際にWEBアプリのベンチマークを3回ずつとってみたところ

ab -n 100 -c 100 https://TEST-SITE.TLD/
Requests per second:    9.19 [#/sec] (mean)
Requests per second:    7.54 [#/sec] (mean)
Requests per second:    6.50 [#/sec] (mean)

 ↓

Requests per second:    80.19 [#/sec] (mean)
Requests per second:    73.79 [#/sec] (mean)
Requests per second:    76.89 [#/sec] (mean)

約9.9倍 速くなりました !!

添付ファイル1
No.1543
07/09 18:31

edit

添付ファイル