當使用者重新整理網頁時,JS 請求的快取處理發生在幾個地方:
1. 瀏覽器快取:
- HTTP 快取頭: 伺服器透過響應頭(例如
Cache-Control
,Expires
,ETag
,Last-Modified
)控制瀏覽器如何快取 JS 檔案。 如果這些頭指示瀏覽器快取檔案,則瀏覽器會在後續請求中直接使用快取版本,而不會向伺服器傳送請求。Cache-Control
是現代快取控制的主要方式,Expires
則比較舊,但一些瀏覽器仍然支援。ETag
和Last-Modified
用於驗證快取是否仍然有效。 - 本地快取: 瀏覽器會將 JS 檔案儲存在本地磁碟或記憶體中。 重新整理頁面時,瀏覽器會先檢查本地快取。如果找到匹配的快取檔案,並且快取未過期,則直接使用快取版本。
2. 服務端快取:
- CDN 快取: 如果網站使用 CDN(內容分發網路),JS 檔案可能會快取在 CDN 伺服器上。 當使用者重新整理頁面時,請求會先到達 CDN 伺服器。如果 CDN 快取命中,則直接從 CDN 獲取檔案,而不會到達源伺服器。
- 反向代理快取: 類似於 CDN,反向代理伺服器也可以快取 JS 檔案。
- 應用伺服器快取: 應用伺服器本身也可以實現快取機制,例如將常用的 JS 檔案快取在記憶體中。
3. 快取控制策略:
- 強制重新整理 (Ctrl+F5 或 Cmd+Shift+R): 強制重新整理會繞過瀏覽器快取,直接向伺服器請求最新的 JS 檔案。
- 普通重新整理 (F5): 普通重新整理時,瀏覽器會檢查快取的有效性。如果快取過期或伺服器指示快取無效,則會重新下載 JS 檔案。否則,使用快取版本。
具體快取過程:
- 瀏覽器根據 URL 生成請求。
- 瀏覽器檢查本地快取。如果找到匹配的快取條目,則檢查快取是否仍然有效(例如,檢查
Cache-Control
或Expires
)。 - 如果快取有效,瀏覽器直接使用快取版本。
- 如果快取無效或未找到快取條目,瀏覽器將請求傳送到伺服器(或 CDN/反向代理)。
- 伺服器返回 JS 檔案以及相應的快取頭。
- 瀏覽器根據快取頭決定是否快取檔案以及快取的有效期。
- 瀏覽器將檔案儲存在本地快取中。
最佳實踐:
- 使用合適的
Cache-Control
頭來控制快取行為。 例如,Cache-Control: public, max-age=31536000
表示快取一年。 - 使用版本號或雜湊值來命名 JS 檔案。 例如,
main.v1.js
或main.abcdef12345.js
。 這樣,當 JS 檔案更新時,檔名也會改變,從而強制瀏覽器下載新的檔案。 - 使用
ETag
或Last-Modified
頭來實現條件請求,避免不必要的下載。
透過合理地配置快取策略,可以顯著提高網站的載入速度和效能。 理解這些快取機制對於前端開發者至關重要。