概要
- bladeから静的ページを生成しそのページを表示する
- データの更新時には一緒に更新する
という運用をやってみようという記事
手順例
HTMLファイル生成するイベントを作る
こんな感じのことをするイベントを作成する。
記事ページなどの単一のモデルのデータしか使わない場合は、Modelに定義するとよさそうです。
public function __construct(User $user)
{
$html = view('home.home')->with('user', $user)->render();
// htmlファイルの保存場所は任意
file_put_contents(storage_path("app/public/home.html"), $html);
}
イベントを発火
作ったイベントをModelの$dispatchesEventsに定義したりなどして、更新時に動くようにする。
後はコマンドにしたり。
ルーティング
例えば
Route::get('/', function () {
// \Illuminate\Support\Facades\File
return \File::get('storage/home.html');
});
備考
- 必要ならばファイルを削除するイベントも作って、削除時に発火させる
- HTMLファイルが無かったら通常通りbladeを表示するようにすると、安心する
- ビューにControllerやMiddlewareからデータを渡しているとレンダーされる時に読み込まれないので、ViewComposerで定義すると嬉しい
おわり
記事ページ等はbladeの更新の際に全HTMLファイルを更新する必要が出てくるので、向かないかもしれません。
運用には注意が必要ですが、bladeの更新頻度が低いかつ表示速度が遅いページの改善法として有効だと思います。TOPページなど。