網站快取 & 伺服器內部快取:WordPress 快取的運作方式
網站快取與伺服器內部快取,是在 WordPress 頁面要求從訪客瀏覽器走到資料庫的路上存放副本的快取層。在 Nginx + Apache 伺服器上檢查後發現,要求會從瀏覽器開始,依序往下經過 CDN、頁面快取、OPcache、Redis,並在有副本的那一層停下。
直接進入原始伺服器的頁面要求,由 nginx 原封不動送出 WP Rocket 產生的 HTML 檔案,不經過 PHP 與資料庫。
Ⅰ. WordPress 快取結構
快取是把一次產生的資料副本先存起來,遇到相同要求時直接用這份副本回應的 網站效能優化 方法。WordPress 要求所使用的快取分為網站快取與伺服器內部快取兩大類。 HTTP 快取標準將只存放在單一訪客瀏覽器中的快取分為 private cache,把多位訪客共用的 CDN·代理快取分為 shared cache,本文將這兩者合稱為網站快取。
頁面快取、OPcache 與物件快取,是附加在伺服器內 WordPress 執行過程中的快取。HTTP 標準沒有另外分類,而 WordPress 官方文件則分為快取外掛(頁面快取)、物件快取、伺服器快取(OPcache 這類 opcode 快取)來說明。
在下方模擬器中,從左側樹狀圖選擇快取並按下標籤,就能看到要求在哪一層停下。
| 層 | 儲存位置 | 儲存內容 | Nginx + Apache 範例 |
|---|---|---|---|
| 瀏覽器快取 | 訪客裝置 | HTML·CSS·JS·圖片·字型 | CSS·圖片 7 天 |
| CDN·代理快取 | 伺服器前端(邊緣節點·反向代理) | 頁面·靜態檔案副本 | Bunny CDN |
| 頁面快取 | 伺服器磁碟·記憶體 | PHP 產生的 HTML | WP Rocket + nginx |
| OPcache | 伺服器記憶體 | PHP 位元組碼 | PHP 8.3,JIT 關閉 |
| 物件快取 | 伺服器記憶體 | 查詢結果·物件 | Redis |
Ⅱ. 網站快取
網站快取,是伺服器透過回應標頭告知儲存方式後,訪客的瀏覽器以及 CDN、代理依照指示存放副本的快取。代表性的標頭有 [Cache-Control]、[ETag]、[Expires]。儲存期限過後,會用條件式要求確認是否有變更;若沒有變更,伺服器會以不含本文的 [304 Not Modified] 回應。
1️⃣ 瀏覽器快取
瀏覽器快取是存放在訪客網頁瀏覽器中的 HTTP 快取,會儲存 HTML、CSS、JavaScript、圖片、字型,再次要求同一個資源時,不是完全不連到伺服器,就是只確認是否有變更。
儲存期限由伺服器透過回應標頭決定。回傳下方回應標頭的 Nginx + Apache 伺服器,對 CSS 與圖片指示保存 7 天,HTML 頁面則不給期限,回應成每次再造訪時都要確認是否有變更。
If-None-Match: "6ab12775-2ee8"cache-control: max-age=604800 expires: Sat, 17 Oct 2026 03:21:00 GMT etag: "6ab12775-2ee8"
etag: "6ac9298c-95575" last-modified: Fri, 09 Oct 2026 17:51:08 GMT
2️⃣ CDN · 代理快取
CDN·代理快取位於訪客與原始伺服器之間,由多位訪客共用。正向代理像企業網路那樣位在訪客端前方,反向代理與 CDN則位在伺服器前方,以儲存的副本代替原始伺服器回應。
代表性的反向代理是 Varnish Cache,Bunny CDN·Akamai 等 CDN 也採用相同結構。使用分地區 DNS 時,可以讓原始伺服器所在地區的訪客直接連到原始伺服器,其他地區的訪客則由最近的 CDN 邊緣節點(例如 Bunny CDN)連同 HTML 一起儲存並回應。
Ⅲ. 伺服器內部快取
伺服器內部快取,是要求抵達原始伺服器後,附加在 WordPress 產生頁面過程中的快取。以 Nginx + Apache 架構的伺服器依下列順序處理要求,前面的步驟找到副本,就不會經過後面的步驟。
| 快取 | 儲存內容 | 儲存時機 |
|---|---|---|
| 1️⃣ 頁面快取 | 完成的 HTML 頁面 | 🅑 ⑤ 回應時由 WP Rocket 存成檔案 |
| 2️⃣ OPcache | 編譯好的 PHP 程式碼(位元組碼) | 🅑 ② 第一次執行 PHP 檔案時 |
| 3️⃣ 物件快取 | 查詢結果·選項等資料片段 | 🅑 ③ WordPress 第一次取出資料時 |
Cloudways 與 ScalaHosting 都能把 Nginx + Apache 架構當作選項來選擇。Cloudways 可在每個應用程式選擇 Hybrid Stack(Nginx + Apache)或 Lightning Stack(只有 Nginx),ScalaHosting 則可在 SPanel 開啟在 Apache 前面加上 Nginx 的設定。
1️⃣ 頁面快取
頁面快取也稱為全頁快取(full-page cache),因為存的是 HTML,也稱為 HTML 快取。它把 PHP 產生的整個網頁存成靜態 HTML 檔案,同一個頁面要求進來時不執行 PHP,直接送出這個檔案。這是上面處理順序中 🅐 的情況。
儲存位置是伺服器記憶體(RAM)或磁碟(HDD/SSD)。記憶體速度快,但成本高、容量有限;磁碟容量充足,但相對較慢。
| 類型 | 範例 | 儲存·回應方式 |
|---|---|---|
| 快取外掛 | WP Rocket · WP Super Cache · W3 Total Cache · Cache Enabler | WordPress 把頁面存成 HTML 檔案,由網頁伺服器送出該檔案。 |
| 網頁伺服器快取 | Nginx FastCGI 快取 · LiteSpeed Cache | 網頁伺服器直接儲存 PHP 的回應,送給下一個要求。 |
| 反向代理快取 | Varnish | 放在網頁伺服器前面的快取伺服器儲存頁面並回應。 |
在 Nginx + Apache 架構下,nginx 會直接讀取並送出 WP Rocket 產生的 HTML 檔案,回應標頭會加上 [x-rocket-nginx-serving-file: HIT]。用 WP Rocket 開啟並設定頁面快取的步驟,整理在 WP Rocket 設定教學 這篇文章。
2️⃣ OPcache
OPcache 把預先編譯好的 PHP 位元組碼存在記憶體,再次執行同一個檔案時就不必經過 PHP 剖析器。它從 PHP 5.5 起就內建,以前的 APC 與 XCache 不支援 PHP 7,現在已經不用了。這相當於上面處理順序 🅑 的第 ② 步。
| 類型 | 狀態 | 說明 |
|---|---|---|
| Zend OPcache | PHP 5.5 起內建 | 目前使用的標準 opcode 快取,以 [opcache.enable=1] 開啟。 |
| OPcache JIT | PHP 8 起包含在 OPcache 中 | 把位元組碼再轉成機器碼執行,以 [opcache.jit] 開關。 |
| APC | 已停止開發 | OPcache 之前使用的 opcode 快取,資料快取功能由 APCu 延續。 |
| XCache | 已停止開發 | 不支援 PHP 7。 |
| WinCache | Windows(IIS)伺服器用 | WordPress 官方文件與 OPcache 一起列出的 opcode 快取。 |
OPcache 以 PHP 設定 [opcache.enable=1] 開啟,PHP 8 之後加入的 JIT 可用 [opcache.jit=disable] 另外關閉。安裝與設定請參考 Zend OPcache 概念與安裝設定 這篇文章。
3️⃣ 物件快取
物件快取把資料庫查詢結果或計算好的物件存到 Redis·Memcached 這類記憶體儲存區。WordPress 預設只在單一要求內記住物件,要接上 Redis 這類儲存區,結果才會在要求結束後保留下來。這相當於上面處理順序 🅑 的第 ③ 步。
| 類型 | 類別 | 要求結束後是否保留 | 說明 |
|---|---|---|---|
| WP_Object_Cache | WordPress 預設 | 否 | 只在單一要求內記住的內建快取。 |
| Redis | 物件快取 | 是 | 獨立的記憶體儲存區,透過 Redis Object Cache 外掛的 drop-in 連接。 |
| Memcached | 物件快取 | 是 | 獨立的記憶體儲存區。 |
| APCu | 物件快取 | 是(同一台伺服器內) | 存放在 PHP 使用的共享記憶體。 |
| 檔案 | 物件快取 | 是 | 以檔案形式存放在磁碟。 |
| InnoDB 緩衝池 | 資料庫自身的快取 · 不是物件快取 | 是 | MySQL·MariaDB 把資料表資料與索引載入記憶體。 |
| 查詢快取 | 資料庫自身的快取 · 不是物件快取 | — | MySQL 8.0 已移除,MariaDB 仍保留但預設關閉。 |
WordPress 透過 Redis Object Cache 外掛加入的 drop-in 檔案([object-cache.php])連接 Redis。安裝過程請參考 WordPress Redis Cache 安裝與設定 這篇文章。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。








