快取:定義與快取被使用的所有領域

聯盟行銷揭露 Ver 3.1
聯盟行銷揭露 Ver 3.2(僅限行動版)

依照維基百科、MDN 與 WordPress 官方文件的分類,把從硬體到網頁使用快取的領域整理成一張樹狀圖。CPU、作業系統、資料庫和瀏覽器都用同一個名稱,所以「清除快取」清掉的東西也會依層級而不同。

快取是把常用或很快就會用到的資料,暫時存放在比原始來源更快的儲存空間,遇到相同的請求時,就用這份副本代替原始資料回應。

英文維基百科的 Cache (computing) 條目把快取分成 CPU 快取·GPU 快取這類硬體快取,以及磁碟·網頁·DNS·資料庫快取這類軟體快取。下方的樹狀圖依快取所在的位置把這些分類歸在一起,網頁快取則依照 MDN 的 private cache 與 shared cache 分類。

🗂️ 使用快取的領域
💻 Ⅰ. 使用者終端裝置
作業系統快取磁碟快取 · DNS 快取
瀏覽器快取HTTP 快取的 private cache
行動 App 快取縮圖 · 工作階段資料
🖥️ Ⅱ. 伺服器與應用程式
頁面快取完成的 HTML(WP Rocket · FastCGI 快取)
OPcachePHP 位元組碼
物件快取Redis · Memcached
網頁框架快取Laravel · Django
🌐 Ⅲ. 內容傳遞 · 網路
CDNHTTP 快取的 shared cache
代理快取正向 · 反向(Varnish)
網路快取ARP 快取 · DNS 解析器快取
🗄️ Ⅳ. 資料庫 · 儲存
DB 內部快取InnoDB 緩衝池 · Shared Buffers
儲存快取磁碟控制器 · SSD DRAM
⚙️ Ⅴ. 硬體
CPU 快取L1 · L2 · L3 · TLB
GPU 快取紋理 · 著色器資料
☁️ Ⅵ. 雲端 · 虛擬化
容器快取Docker 層
無伺服器函式Warm Start
建置快取CI/CD 相依套件 · 產出物

瀏覽器·CDN·伺服器內部快取處理一次 WordPress 請求的順序,可以在 網站快取 & 伺服器內部快取:WordPress 快取的運作方式 這篇文章用模擬器確認。

Ⅰ. 使用者終端裝置

  • ↳ Client-Side Cache

個人電腦與智慧型手機這類使用者終端裝置的快取,可以分成作業系統(OS)快取、瀏覽器快取與行動 App 快取。

作業系統(OS)快取裝置記憶體(RAM)
儲存內容從磁碟讀取的資料 · 網域與 IP 位址

磁碟快取(page cache)把從磁碟讀取的資料留在記憶體中,由作業系統核心管理。DNS 快取則儲存最近查詢過的網域與 IP 位址。

磁碟快取DNS 快取
瀏覽器快取瀏覽器儲存空間
儲存內容HTML · CSS · JS · 圖片 · 字型

再次請求相同資源時,不會一路到伺服器,或只確認是否有變更。使用 Service Worker(Cache API),離線時也能用儲存的資源開啟網頁應用程式。

private cacheService Worker
行動 App 快取App 儲存空間
儲存內容縮圖 · 部分內容 · 登入狀態

處理大量內容的 App 會把收到的資料與最近瀏覽的清單存在裝置上,避免重複下載同樣的資料。

YouTubeInstagram

Ⅱ. 伺服器與應用程式快取

  • ↳ Server-Side Cache

伺服器端快取是請求抵達伺服器後,附在產生頁面過程中的快取。WordPress 官方文件把它分成快取外掛(頁面快取)、物件快取與伺服器快取(OPcache 這類 opcode 快取)來說明。

頁面快取伺服器磁碟 · 記憶體
儲存內容完成的 HTML 頁面

相同頁面的請求不執行 PHP,直接送出儲存的副本。有快取外掛與網頁伺服器快取兩種。

WP RocketNginx FastCGI 快取LiteSpeed Cache
OPcache伺服器記憶體
儲存內容編譯好的 PHP 位元組碼

再次執行同一個檔案時省略編譯。從 PHP 5.5 起預設內建。

opcode 快取
物件快取伺服器記憶體
儲存內容查詢結果 · 工作階段資料

把常用資料存在記憶體儲存區,避免重複執行相同查詢。

RedisMemcached
網頁框架快取應用程式
儲存內容範本 · 路由 · 查詢結果

網頁框架把算繪好的範本與查詢結果存在自己的快取。

LaravelDjango

Ⅲ. 內容傳遞 / 網路基礎設施快取

網路基礎設施的快取在訪客與原始伺服器之間用副本回應,縮短實體距離並減輕原始伺服器的負載。在 HTTP 快取標準中,屬於多位訪客共用的 shared cache。

CDN邊緣伺服器
儲存內容靜態檔案 · 頁面

從分散在世界各地的伺服器中,離訪客最近的那台傳送。結構與優點請參考 什麼是 CDN?使用 CDN 的理由與 5 個好處 這篇文章。

CloudflareAkamaiFastlyQUIC.cloud
代理快取代理伺服器
儲存內容伺服器回應

正向代理像企業網路那樣在客戶端前方儲存回應,反向代理則在伺服器前方儲存。

Varnish CacheNginx 反向代理
網路快取網路設備 · DNS 解析器
儲存內容IP 與 MAC 位址對應 · DNS 查詢結果

網路設備存在 ARP 快取,電信業者與公用 DNS 解析器則在記錄的 TTL 期間保存查詢結果。

ARP 快取DNS 解析器快取

Ⅳ. 資料庫與儲存系統快取

磁碟 I/O 慢,所以資料庫與儲存裝置會把常讀的資料放到記憶體裡使用。

資料庫內部快取DB 伺服器記憶體
儲存內容常讀的資料 · 索引

把常讀的資料與索引保留在記憶體。MySQL 查詢快取在 8.0 已移除,MariaDB 雖然還有,但預設是關閉的。

InnoDB 緩衝池PostgreSQL Shared BuffersMongoDB WiredTiger
儲存快取儲存裝置內的記憶體
儲存內容最近讀取 · 寫入的資料

硬碟控制器內建的記憶體與 SSD 裡的 DRAM 會暫存資料,減少 I/O 延遲。

磁碟控制器快取SSD · NVMe DRAM

Ⅴ. 硬體層級快取

硬體快取是內建在 CPU 與 GPU 裡的高速記憶體,處理資料比主記憶體(RAM)更快。

CPU 快取處理器內
儲存內容指令 · 資料 · 位址轉換結果

L1 每個核心各有一份,分成指令快取與資料快取,L3 則由所有核心共用。記憶體管理單元(MMU)把虛擬位址轉換成實體位址的結果存在 TLB。

L1L2L3TLB
GPU 快取圖形處理器內
儲存內容紋理 · 著色器指令 · 中間結果

提高 GPU 在遊戲、3D 繪圖與機器學習運算中的處理效率。

Ⅵ. 雲端 / 虛擬化環境快取

在雲端與虛擬化環境中,重複使用容器映像、函式執行環境與建置產出物,縮短部署與執行時間。

容器快取建置伺服器 · 映像倉庫
儲存內容映像層

Docker 映像由多個層組成,沒有變更的層不會重新建置或下載。

Docker
無伺服器函式雲端執行環境
儲存內容執行環境

把呼叫結束的執行環境保留一段時間,下次呼叫時再使用,減少初始化時間(Cold Start)(Warm Start)。

AWS LambdaGoogle Cloud Functions
建置快取CI 快取儲存區
儲存內容相依套件 · 編譯產出物

縮短重複建置的時間。

GitHub ActionsGitLab CI

🔢 FAQ & 推薦內容

不會。清除瀏覽器快取只會刪掉訪客裝置上的副本。伺服器的頁面快取與 CDN 上的副本,要由網站管理者在快取外掛或 CDN 管理畫面清除。

清除後的第一個請求要一路到原始來源,所以回應比平常慢。等這個請求重新產生副本,之後的請求就會恢復原本的速度,WP Rocket 的 [Preload] 也會在清除後預先產生副本。

Windows 在工作管理員 [Performance] → [CPU] 畫面下方會顯示 L1·L2·L3 快取容量。Linux 則可以在 [lscpu] 指令的結果中看到同樣的數值。

💾 快取相關文章 10 篇
🗂️ 快取
📋 快取:定義與所有領域 📄 網站快取 & 伺服器內部快取
📋 WP Rocket 設定教學 📝 Zend OPcache 📝 安裝 Redis Cache
📝 什麼是 CDN? 📝 Varnish Cache
📋 WP Rocket 速度測試 📝 速度改善案例 📝 快取 · 最佳化外掛

ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Prove your humanity: 1   +   6   =