3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel bladeから静的ページを生成して表示速度を改善してみたい

Last updated at Posted at 2019-10-09

概要

  • 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ページなど。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?