當使用者重新整理網頁時,js的請求有哪些地方會有快取處理呢?

王铁柱6發表於2024-11-28

當使用者重新整理網頁時,JS 請求的快取處理發生在幾個地方:

1. 瀏覽器快取:

  • HTTP 快取頭: 伺服器透過響應頭(例如 Cache-Control, Expires, ETag, Last-Modified)控制瀏覽器如何快取 JS 檔案。 如果這些頭指示瀏覽器快取檔案,則瀏覽器會在後續請求中直接使用快取版本,而不會向伺服器傳送請求。 Cache-Control 是現代快取控制的主要方式,Expires 則比較舊,但一些瀏覽器仍然支援。 ETagLast-Modified 用於驗證快取是否仍然有效。
  • 本地快取: 瀏覽器會將 JS 檔案儲存在本地磁碟或記憶體中。 重新整理頁面時,瀏覽器會先檢查本地快取。如果找到匹配的快取檔案,並且快取未過期,則直接使用快取版本。

2. 服務端快取:

  • CDN 快取: 如果網站使用 CDN(內容分發網路),JS 檔案可能會快取在 CDN 伺服器上。 當使用者重新整理頁面時,請求會先到達 CDN 伺服器。如果 CDN 快取命中,則直接從 CDN 獲取檔案,而不會到達源伺服器。
  • 反向代理快取: 類似於 CDN,反向代理伺服器也可以快取 JS 檔案。
  • 應用伺服器快取: 應用伺服器本身也可以實現快取機制,例如將常用的 JS 檔案快取在記憶體中。

3. 快取控制策略:

  • 強制重新整理 (Ctrl+F5 或 Cmd+Shift+R): 強制重新整理會繞過瀏覽器快取,直接向伺服器請求最新的 JS 檔案。
  • 普通重新整理 (F5): 普通重新整理時,瀏覽器會檢查快取的有效性。如果快取過期或伺服器指示快取無效,則會重新下載 JS 檔案。否則,使用快取版本。

具體快取過程:

  1. 瀏覽器根據 URL 生成請求。
  2. 瀏覽器檢查本地快取。如果找到匹配的快取條目,則檢查快取是否仍然有效(例如,檢查 Cache-ControlExpires)。
  3. 如果快取有效,瀏覽器直接使用快取版本。
  4. 如果快取無效或未找到快取條目,瀏覽器將請求傳送到伺服器(或 CDN/反向代理)。
  5. 伺服器返回 JS 檔案以及相應的快取頭。
  6. 瀏覽器根據快取頭決定是否快取檔案以及快取的有效期。
  7. 瀏覽器將檔案儲存在本地快取中。

最佳實踐:

  • 使用合適的 Cache-Control 頭來控制快取行為。 例如,Cache-Control: public, max-age=31536000 表示快取一年。
  • 使用版本號或雜湊值來命名 JS 檔案。 例如,main.v1.jsmain.abcdef12345.js。 這樣,當 JS 檔案更新時,檔名也會改變,從而強制瀏覽器下載新的檔案。
  • 使用 ETagLast-Modified 頭來實現條件請求,避免不必要的下載。

透過合理地配置快取策略,可以顯著提高網站的載入速度和效能。 理解這些快取機制對於前端開發者至關重要。

相關文章