指南

什麼是快取(Caching)?應用程式開發者的淺白指南

快取是指保存一份現成的副本,供那些取得時較慢或成本較高的內容使用,讓下一次的請求能夠從該副本迅速得到回應。這份保存的副本稱為快取(cache)。瀏覽器會快取圖片,令你第二次瀏覽同一網站時載入更快;伺服器則會快取慢速資料庫查詢的結果,免得每位訪客都要重新執行一次。

快取令 App 運行更快、營運成本更低。它的主要取捨是:副本可能會過時。

用 AI 做 App 時,為何快取重要

在 AI 生成的 App 中,你會以三種方式遇到快取:

  • 「我已更新 App,但仍看到舊版本。」 這是最常見的快取情況,通常無害:你的瀏覽器或 CDN 正在顯示已保存的副本。
  • 速度。 如果某頁面因為要為每位訪客重新計算相同數字而變慢,快取計算結果便可讓它感覺即時。
  • 成本。 很多 AI 生成工具和主機都會就運算、資料庫時間及外部 API 呼叫收費。如果一千位訪客都觸發同一個昂貴的請求,快取讓你只需付費一次。

認識快取的基本概念,可以讓你在適當的地方要求使用快取,也能在快取導致某些東西看似有問題時察覺出來。

日常比喻

想像一間繁忙咖啡店的廚房。

每天早上,店員可以在客人點單時才用新磨的咖啡豆逐杯沖調,但那樣很慢。於是他們會在保溫爐上預先準備一壺濾泡咖啡,大部分客人幾秒鐘就能拿到一杯,這就是快取命中(cache hit)。咖啡喝光後,就要重新沖一壺,這就是快取未命中(cache miss)。

不過,咖啡放久了會變質,所以店裡有一條規則:超過三十分鐘的咖啡就要倒掉。這條規則就是快取的過期時間。沒有人會整天都用同一壺咖啡,也不會預先沖好某位客人特別訂的燕麥奶加三粒糖的咖啡——有些東西根本不應該快取。

快取存放在哪裡

一次頁面載入可能會經過多個快取,由最接近用戶的一層,至最遠的一層:

快取位置通常儲存的內容例子
瀏覽器快取在訪客的裝置上圖片、樣式表、腳本、字型第二頁時,你的標誌即時載入
CDN 快取分布全球、靠近訪客的伺服器靜態檔案,有時也包括整頁東京的訪客從附近的伺服器取得檔案,而非你的原始伺服器
應用程式快取在伺服器上或其旁邊,通常在記憶體或 Redis 中慢速查詢或外部 API 呼叫的結果今日的匯率,每小時抓取一次
資料庫快取在資料庫內部最近使用過的資料及查詢計畫常用的資料列留在快速記憶體中

CDN(內容傳遞網絡)基本上就是一個覆蓋全球、專門快取你網站檔案的網絡。

快取如何決定保留什麼

每個快取都必須回答同樣的問題:

  • 什麼可以快取? 公開的共用資料(例如產品圖片、部落格文章)可以;私人資料(例如用戶的帳戶頁面、訊息)則絕不可放在共用快取中。
  • 保留多久? 這就是 TTL(存活時間,time to live)。標誌可以快取一年,庫存數量則只可以快取 30 秒。
  • 如何更新? 要麼副本過期後重新抓取,要麼在資料改變時由 App 主動移除副本,後者稱為快取失效(invalidation)。

對於網站,伺服器會透過 Cache-Control 標頭,告訴瀏覽器和 CDN 如何快取每個檔案。例如,Cache-Control: max-age=3600 表示「這份副本可以重複使用一小時」。

現代的建置工具會以**快取破壞(cache busting)**處理靜態檔案最困難的部分:每當檔案改動,它就會獲得一個帶指紋的新名稱,例如 app.3f9a2c.js。瀏覽器可以長時間快取舊名稱,因為新版本的名稱完全不同。

實例:產品目錄

你經營一間小型網上商店。首頁從資料庫顯示 50 件產品的價格與庫存,另有一個「熱門」列表,需要對所有訂單進行緩慢的計算。

  1. 圖片及腳本由瀏覽器及 CDN 長期快取。每次建置都會為有改動的檔案賦予新名稱,因此更新仍會顯示。
  2. 熱門列表每 10 分鐘計算一次,並儲存在應用程式快取中。在這 10 分鐘內的每位訪客都會即時取得已儲存的結果。
  3. 價格只快取短時間,並且每當你編輯產品時就清除快取,因此客人不會長時間看到舊價格。
  4. 結帳時的庫存絕不快取。當有人按下「購買」,App 會查核真實的資料庫,因此不會賣出剛剛售罄的貨品。
  5. 購物車及帳戶頁面絕不存放在共用快取中,因為它們屬於個人資料。

結果是:首頁快速,資料庫的工作量大減,而且與金錢或私隱有關的內容絕不會過時。

重要詞彙

詞彙意思
快取命中/未命中(cache hit / miss)資料在快取中找到/必須從來源重新取得。
TTL(存活時間)已快取的副本被視為新鮮的時間長短。
過時資料(stale data)已經過時的快取副本。
快取失效(invalidation)因原始資料已改變而主動移除快取副本。
快取破壞(cache busting)內容改動時更改檔案名稱或網址,讓快取抓取新版本。
Cache-Control告訴瀏覽器與 CDN 如何快取回應的 HTTP 標頭。
強制重新整理(Hard refresh)重新載入頁面,同時要求瀏覽器忽略其快取。
Redis常用的記憶體資料儲存,多用作應用程式快取。

常見誤解

  • 「快取永遠有益。」 快取錯誤的內容會造成真正的問題:舊價格、新文章不見了,或最糟的情況——把一位用戶的私人頁面顯示給另一位用戶。應審慎決定快取的內容。
  • 「如果看到舊版本,代表我的更新失敗了。」 通常不是。在假定有問題之前,先試試強制重新整理(Windows 按 Ctrl+Shift+R,Mac 按 Cmd+Shift+R)或私密視窗。
  • 「快取能修正慢速 App。」 它只是對重複的請求掩蓋慢速的情況。第一次請求仍然很慢;如果根本問題是缺少資料庫索引,也要修正該索引。
  • 「應該儘量長時間地快取所有東西。」 長時間快取適合那些改變時會獲得新名稱的檔案。對於 HTML 頁面及資料,較短的時間比較安全。
  • 「清除我的快取就能為所有人修正。」 它只清除你的瀏覽器。訪客及 CDN 快取仍然保留他們各自的副本。

可以問你的 AI 生成工具的問題

  • 「這個 App 哪些部分比較慢?哪些可以安全地快取?」
  • 「把[熱門列表/API 結果]快取[N]分鐘,並在底層資料改變時清除快取。」
  • 「確保任何含個人或帳戶資料的頁面都不會被 CDN 或共用快取儲存。」
  • 「為帶指紋的靜態檔案設定較長的快取時間,為 HTML 設定較短的時間。」
  • 「快取來自[外部 API]的回應,讓我們不必在每次載入頁面時都呼叫它——並告訴我這些資料可能會過時多久。」
  • 「發布後我看到舊版本。是我的瀏覽器快取,還是某些內容沒有部署?」

Mythex 中的快取

把更新發布到 Mythex App 後,說明文件指出 CDN 快取可能會短暫延遲;強制重新整理公開網址,即可看到新版本。參閱如何發布。主機限制頁面亦建議快取靜態資產,因為主機、資料庫時間及頻寬都是從你的點數餘額中扣除的。除此之外,例如快取查詢結果或 API 回應,都需要你要求代理程式把它建進你的 App。

相關閱讀:什麼是 CDN、如何令你的網站更快,以及什麼是速率限制。

常見問題

簡單來說,什麼是快取?

快取是把一些取得時較慢或成本較高的東西保存一份副本,下次需要時便可以從保存的副本即時提供。瀏覽器、CDN、伺服器及資料庫都會使用快取,令 App 運行得更快、成本更低。

更新網站後,為何仍然看到舊版本?

你的瀏覽器或 CDN 很可能仍在提供舊檔案的快取副本。強制重新整理(Windows 按 Ctrl+Shift+R,Mac 按 Cmd+Shift+R)通常就能解決。對於訪客而言,設計良好的網站會為更新後的檔案賦予新名稱,讓快取自動抓取新版本。

清除快取會做什麼?

清除瀏覽器快取會刪除瀏覽器儲存的檔案及頁面副本,令它下次把所有內容重新下載。這可以修正顯示異常或過時的頁面,但之後第一次載入頁面會稍慢。

快取會否造成問題?

會。主要風險是提供過時的資料,例如舊價格、過時的庫存數量;更糟的情況是把某個用戶的私人頁面快取起來,並顯示給另一人看。良好的快取規則會決定哪些內容可以快取、保留多久,並且絕不在共用快取中儲存個人資料。

Mythex · Pricing · 用 AI 建造任何嘢 · 網站及應用程式範本 · Mythex 比較 · AI 應用程式開發詞彙表 · 免費 AI 應用程式開發工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(台灣)