在使用 Laravel 開發網站或應用程式時,經常會使用靜態檔案來提高網站的效能和使用者體驗。這些靜態檔案通常包括 CSS、JavaScript、圖片和字體等等。但是在開發過程中,經常會遇到修改靜態文件後,瀏覽器仍然使用原來的快取文件,導致網站出現問題的情況。因此,在這篇文章中,我們將談論 Laravel 靜態檔案的快取清除方法,以便您可以在修改靜態檔案後立即看到效果。
首先,讓我們看看瀏覽器如何快取靜態檔案。瀏覽器會為發起的靜態檔案要求建立一個識別碼 (ETag),然後將此識別碼與靜態檔案一起儲存到快取中。每次瀏覽器再次請求相同的文件時,它將向伺服器發送該文件的標識符,並使用該標識符驗證快取。如果標識符匹配,瀏覽器將從快取中提取文件。
雖然瀏覽器快取是在使用者電腦本地完成的,但在 Laravel 應用程式中,我們可以透過更改靜態檔案的 URL 或添加其它查詢參數來幹擾瀏覽器快取。這意味著每次修改靜態文件時,我們可以更改其 URL 或新增查詢參數,以確保瀏覽器會取得新的文件,而不是使用快取的舊文件。
接下來,我們將看到如何實現這一目標。
方法一:手動更改URL 或新增查詢參數
手動更改靜態檔案的URL 或新增查詢參數是一種簡單的緩存清除方法。例如,我們可以在引用 CSS 檔案時,將其 URL 變更為:
<link rel="stylesheet" href="style.css?v=1">
這會告訴瀏覽器請求該檔案時,請新增 ?v=1
作為查詢參數。如果我們想更新文件,可以將查詢參數更改為 ?v=2
或任何其他值。每次修改文件時,都需要更新 URL 或新增新的查詢參數。
儘管這種方法相對簡單,但需要手動更新每個文件的 URL 或添加查詢參數,非常費時費力。
方法二:使用Mix 和版本控制
Laravel Mix 是Laravel 的一個前端建置工具,它允許您使用許多流行的前端工具來編譯、壓縮和打包CSS、JavaScript、圖片和字體等文件。 Mix 可以幫助您自動產生靜態檔案 URL,並在每次建置時變更版本號,以確保瀏覽器取得最新的檔案。
要使用Mix,我們需要先安裝Laravel Mix:
npm install laravel-mix --save-dev
然後,在webpack.mix.js
檔案中定義靜態檔案和版本:
mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css') .version();
執行npm run dev
或npm run prod
可以產生具有版本號碼的檔案。例如,如果我們編譯 app.css
文件,它將產生 app.css?id=48d24b
文件,其中 48d24b
是檔案的雜湊值。每次修改檔案時,Laravel Mix 將使用新的雜湊值產生新的版本。
要在 HTML 檔案中使用 Mix 產生的靜態檔案 URL,可以使用下列程式碼:
<link rel="stylesheet" href="{{ mix('css/app.css') }}">
這會自動將檔案名稱轉換為帶有版本號碼的檔案名稱。例如,如果我們執行 npm run prod
,則上面的程式碼將產生以下結果:
<link rel="stylesheet" href="/css/app.css?id=48d24b">
透過使用 Laravel Mix,我們無需手動更改檔案的 URL 或新增查詢參數。 Laravel Mix 將自動為我們產生新的版本號,並更改靜態文件的 URL。
方法三:使用快取清除中間件
Laravel 快取清除中間件允許我們在每次請求時清除瀏覽器快取。要使用快取清除中間件,我們可以在app/Http/Middleware/CacheControl.php
# 中建立以下程式碼:
<?php namespace App\Http\Middleware; use Closure; class CacheControl { public function handle($request, Closure $next) { $response = $next($request); $response->header('Cache-Control', 'nocache, no-store, max-age=0, must-revalidate'); $response->header('Pragma', 'no-cache'); $response->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT'); return $response; } }
然後,在app/Http/Kernel.php
中註冊中間件:
protected $middleware = [ // ... \App\Http\Middleware\CacheControl::class, ];
現在,每次瀏覽器請求靜態檔案時,它將向伺服器發送一個新的請求,而不是使用緩存,確保我們始終獲得最新的檔案。
透過手動更改靜態文件的URL 或新增查詢參數,使用Laravel Mix 或使用快取清除中間件,我們可以有效地清除Laravel 應用程式中的快取文件,並確保用戶始終看到最新的內容。
嘗試不同的方法,並選擇最適合您需求的方法來管理靜態檔案的快取清除。無論使用哪種方法,都應該隨時注意快取的影響,以確保您的網站始終保持良好效能和使用者體驗。
以上是laravel靜態檔案怎麼快取清除(方法詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!