網頁效能、快取與 CDN

快取命中率(the cache hit ratio)

想像一個服務台,把最常見問題的答案印好放在架上。當有人問的問題架上已有,櫃員立刻回答(命中 hit);當問題是新的,櫃員得打電話到總部等候(未命中 miss)。若每 100 個問題中有 90 個架上已有,這個服務台就跑得飛快,總部也幾乎不被打擾。快取命中率就是那個比例:快取由所存副本回應,而非回傳給原始伺服器處理的請求佔比。

它的計算很簡單:命中數除以總請求數——例如 10,000 個請求中有 9,000 次命中,就是 0.9(90%)命中率,剩下 10% 的未命中率。每次命中都快且不增加原始伺服器負載;每次未命中都要花一趟完整的回程去取得(通常並儲存)內容——即快取填充(cache fill)。命中率取決於你快取什麼、快取多久:長的新鮮度壽命、有大量重複請求的熱門內容、夠大的快取,都會把它推高;高度個人化的內容、極長尾的內容(許多項目各自很少被請求)、以及積極的 no-store 規則,則會把它壓低。

為什麼重要:命中率是衡量快取或 CDN 運作好壞的頭號指標。高命中率代表多數使用者就近被服務、原始伺服器只處理一小股流量、頻寬成本下降。但要細讀它:以「項目」算的命中率可能與以「位元組」算的不同,因為少數巨大檔案的行為和許多微小檔案不同;而極高的命中率也可能只代表你在提供過時內容。它是指引,不是目的本身——真正的目標是又快又正確的傳遞,命中率是朝此目標的一個(重要)訊號。

一個 CDN 回報圖片有 95% 命中、但 HTML 只有 40%。圖片很少變且大家共用(容易快取),而 HTML 部分個人化又短命——所以大多數 HTML 請求仍會回到原始伺服器。

不同內容的快取程度不同:共用且穩定的資產命中得頻繁得多。

高命中率未必就是好事。它可能掩蓋過時(提供過期副本),或掩蓋所快取的內容本來就沒人要。永遠要把它與正確性檢查、以及使用者真正感受到的延遲一起看。

又称
hit ratecache hit rate命中率快取命中比率