Laravel頁面靜態化最佳實踐

Wangds發表於2020-11-20

環境

php7.4
nginx1.17
mysql5.7
laravel8
windows10

路線

  • 控制器返回檢視時這麼操作

    public function test(Request $request) {
      $view =  view('test');
      Storage::disk('local')->put('views/' . $request->path(), $view->render());
      return $view;
    }
  • nginx配置這麼寫

    location / {  
      root D:/wwwroot/demo/storage/app/views;
      index index.html;
      try_files $uri $uri.html @default;
    }
    location @default {
      root D:/wwwroot/demo/public;
      index index.php;
      try_files $uri $uri/ /index.php$is_args$query_string;
    }

這樣就能在第一次訪問時生成相應的靜態網頁,之後再訪問時就會直接返回靜態網頁。

  • 進一步

實現過期刪除、自動更新功能,大概就是獲取views資料夾下的所有檔名,記錄在案,然後定期清除,還可以主動發出請求觸發更新。另一個就是無損實現全站靜態化,這需要覆蓋 Foundations/helpers.php 中的 view() 方法,然而這個檔案已經被建立自動載入對映了,正常情況下無法覆蓋,你可以安裝 funkjedi/composer-include-files ,它可以優先自動載入你自定義的php檔案,這樣就ok了。

  • 認證狀態

通常需要顯示當前登入使用者的頭像,靜態化後就不能顯示了?當然可以。

比如,認證後儲存使用者資料到瀏覽器,透過js把當前狀態更新到靜態的html上。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章