~/blog/wordpress-page-cache-vs-object-cache-guide.md
網站效能與架構優化 · 2025 / 09 / 15

搞懂 Page Cache 與 Object Cache:WordPress 效能雙核心解析

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
搞懂 Page Cache 與 Object Cache:WordPress 效能雙核心解析
目錄 table-of-contents.md

寫了這麼多年的 Code,看過各式各樣的網站疑難雜症,最常被問到的問題,大概就是:「Eric,我的 WordPress 網站好慢,裝了快取外掛怎麼還是沒什麼感覺?」

嗯,這問題就像問醫生:「我吃了止痛藥怎麼還在痛?」一樣,我們得先搞清楚痛的是哪裡。很多人對 WordPress 快取的理解,就是裝個 WP Rocket 或類似的外掛,然後…就沒有然後了。這其實只做對了一半,甚至不到一半。你可能只啟用了網站的「第一層渦輪」,卻忽略了藏在引擎深處的「第二顆心臟」。

今天,我這個愛囉嗦的工程師就要來掀開 WordPress 效能優化的底層邏輯,帶你徹底搞懂兩個最核心、卻也最容易被搞混的概念:頁面快取 (Page Cache)物件快取 (Object Cache)。搞懂它們的差別,你的 WordPress 效能優化技巧 才能真正從「有做」進化到「做對」,讓網站從牛車變火箭!

為什麼你的 WordPress 網站會變慢?解剖一個頁面的誕生過程

在我們談「快取」這個解藥之前,得先了解「慢」這個病因。當一個使用者(比如你媽)在瀏覽器輸入你的網址並按下 Enter 時,背後發生了一連串非常繁忙的工作:

  • 第 1 步: 瀏覽器向你的主機發出請求:「嗨,我想要看一下首頁!」
  • 第 2 步: 主機上的網頁伺服器(Nginx 或 Apache)接到請求,一看是個 WordPress 網站,於是把工作交給 PHP 處理。
  • 第 3 步: PHP 開始執行 WordPress 核心程式碼。
  • 第 4 步: WordPress 開始組合頁面:它需要載入你的主題、啟用你的外掛、抓取設定選項…
  • 第 5 步: (這就是效能殺手!) WordPress 開始對資料庫 (MySQL/MariaDB) 進行大量的查詢。它要問:「首頁要顯示哪幾篇文章?」「選單有哪些項目?」「小工具區塊要放什麼內容?」…這些一來一往的查詢,非常耗費時間和伺服器資源。
  • 第 6 步: 資料庫回傳所有資料後,PHP 把這些資料跟你的主題模板「組裝」成一個完整的 HTML 檔案。
  • 第 7 步: 伺服器把這個千辛萬苦產生出來的 HTML 檔案,回傳給使用者的瀏覽器。

看到了嗎?每一個訪客的每一次瀏覽,如果沒有快取,WordPress 就像個超級盡責但沒效率的廚師,堅持每一份訂單都從洗菜、切菜、炒菜開始,從頭到尾把整套滿漢全席再做一次。問題是,大部分客人點的都是同一道宮保雞丁啊!這就是為什麼我們需要快取來當我們聰明的助手。

第一道防線:頁面快取 (Page Cache) - 把現成的菜直接端出去

頁面快取是最直觀、也是最多人知道的一種快取。它的概念非常簡單粗暴:

什麼是頁面快取?

頁面快取會在上面提到的「第 7 步」完成後,把那個最終產生的、熱騰騰的 HTML 檔案,直接存成一個靜態檔案。當下一個訪客來訪時,網頁伺服器會聰明地繞過後面那一長串 PHP 和資料庫的繁瑣流程,直接把這個現成的 HTML 檔案丟給他。

用廚師的比喻就是:廚師辛苦炒好第一盤宮保雞丁後,直接把成品放在保溫燈下。後面的客人再點,服務生直接從保溫燈下取餐,一秒上菜!這大大縮短了 TTFB (Time To First Byte),也就是使用者從發出請求到收到第一個位元組資料的時間。

頁面快取的優點與極限

  • 優點: 對於「未登入」的訪客(也就是絕大多數的訪客)來說,效果拔群。網站載入速度可以有飛躍性的提升。
  • 極限: 它的罩門在於「動態內容」。對於已經登入的使用者(例如網站管理員、會員),或是像 WooCommerce 購物車這種每個人內容都不同的頁面,頁面快取就派不上用場了。總不能讓李先生看到王太太的購物車吧?這也是為什麼很多人裝了快取外掛,自己登入後台還是覺得卡得要死。

市面上大部分的快取外掛,如 WP Rocket、W3 Total Cache、LiteSpeed Cache,主要的核心功能就是頁面快取。

深入心臟:物件快取 (Object Cache) - 廚房內部的流程優化

如果說頁面快取是優化「出餐口」,那物件快取就是徹底改造「廚房內部」的工作流程。這才是真正能讓 WordPress 全面加速的黑魔法,也是許多進階 WordPress 效能優化技巧 的核心。

什麼是物件快取?

物件快取不會去管最終的 HTML 頁面,它的目標是 WordPress 運作過程中那些重複、耗時的操作,尤其是「資料庫查詢」。

WordPress 內建了一個 `WP_Object_Cache` 的類別,它會把一些查詢結果暫時存在 PHP 的記憶體中。但問題是,這種內建的快取是「非持續性的 (Non-persistent)」,也就是說,當那個頁面載入完成後,這些快取就煙消雲散了。下一個頁面請求進來,所有查詢還是得重來一遍。

而我們通常所說的「啟用物件快取」,指的是掛載一個「持續性的 (Persistent)」後端,最常見的就是 RedisMemcached。這兩者都是基於記憶體的高速資料庫。當你啟用了它們,`WP_Object_Cache` 就會把查詢結果存到 Redis/Memcached 裡。下次再有同樣的請求,WordPress 就可以直接從超高速的記憶體裡讀取結果,完全不用再去麻煩慢吞吞的資料庫了。

用廚師的比喻就是:廚師不再是每次都去倉庫慢慢找蔥薑蒜,而是把常用備料(資料庫查詢結果)全部放在手邊一個超高速的智慧備料櫃(Redis)裡。不管是炒宮保雞丁還是麻婆豆腐,都能瞬間拿到備料,大大縮短烹飪時間。

如何啟用 Persistent Object Cache?

啟用它通常需要兩步:

  1. 伺服器端: 你的主機環境必須安裝 Redis 或 Memcached 服務。這點可以詢問你的主機商,像 Cloudways 這類的管理型主機通常都內建一鍵啟用功能。
  2. WordPress 端: 安裝一個對應的外掛,例如「Redis Object Cache」。安裝啟用後,通常它會要求你在 `wp-config.php` 檔案中加入一些設定,來告訴 WordPress 如何跟 Redis 溝通。

例如,使用 Redis Object Cache 外掛時,你可能需要在 `wp-config.php` 中加入類似這樣的程式碼:

define('WP_CACHE_KEY_SALT', 'your-unique-site-prefix:');
define('WP_REDIS_CLIENT', 'phpredis');
define('WP_REDIS_SCHEME', 'tcp');
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
// define('WP_REDIS_PASSWORD', 'your-password'); // 如果你的 Redis 有密碼

設定完成後,到外掛的設定頁面點擊「Enable Object Cache」,看到綠色的「Connected」狀態,就代表你的 WordPress 引擎已經裝上第二顆心臟了!你會發現,不僅是網站前台,連 `wp-admin` 後台的反應速度都變得流暢許多。

Page Cache vs. Object Cache:我該怎麼選?別傻了,我全都要!

講到這裡,你應該明白了。這根本不是一個二選一的選擇題!一個成熟的 WordPress 網站,兩者都不可或缺。

我幫大家整理一個簡單的比較表:

  • 頁面快取 (Page Cache)
    • 目標: 未登入的訪客。
    • 快取內容: 完整的 HTML 頁面。
    • 優點: 極致的前台載入速度,大幅降低伺服器負載。
    • 好比: 餐廳的「外場」優化,讓上菜速度變快。
  • 物件快取 (Object Cache)
    • 目標: 所有使用者(包含登入者)與後台操作。
    • 快取內容: 資料庫查詢結果、複雜運算結果等「半成品」。
    • 優點: 降低資料庫壓力,加速後台反應,對電商、會員網站等動態網站效果顯著。
    • 好比: 餐廳的「內場」流程改造,讓廚師備料和做菜速度變快。

看到了嗎?它們作用在不同的環節,完美互補。真正的 WordPress 效能優化技巧,就是讓頁面快取守住第一道大門,快速應對海量的匿名訪客;同時讓物件快取深入核心,為所有動態請求和後台操作提供強勁動力。這才是打造一個全面高速網站的完整藍圖。

結論:別再只做表面功夫,深入核心才能治本

效能優化是一門細膩的工程學,絕對不是安裝一個外掛就能一勞永逸的。當你下次覺得網站卡頓時,別再只是清空快取然後雙手合十祈禱了。

請記得 Eric 的囉嗦:先檢查你的網站是否同時擁有「頁面快取」和「物件快取」這兩大護法。頁面快取是你的盾,抵擋外部的流量衝擊;物件快取是你的劍,斬斷內部的效能瓶頸。兩者兼備,才能在競爭激烈的網路世界中,提供給使用者絲滑流暢的體驗。

當然,效能優化還包含圖片優化、CDN、資料庫索引等更多層面的學問,但搞懂並實踐這兩種核心快取,絕對是你邁向高手之路最關鍵的一步。


延伸閱讀

如果你對於如何檢測網站效能瓶頸,或是在主機上設定 Redis、Memcached 感到頭痛,覺得這些工程師的術語太過複雜,別擔心!浪花科技的團隊專門處理這些棘手的技術問題。歡迎與我們聯繫,讓我們為你的網站進行一次深度健檢,並打造最適合你的效能優化方案!

// FAQ

常見問題

WordPress 的頁面快取(Page Cache)與物件快取(Object Cache)有什麼差別?
頁面快取會把產生好的完整 HTML 直接存成靜態檔案,讓後續未登入訪客繞過 PHP 與資料庫流程直接取用,優化的是前台出餐速度。物件快取則針對 WordPress 運作過程中重複、耗時的資料庫查詢結果做快取,加速所有使用者與後台操作,優化的是內部流程。兩者作用環節不同、互補,不是二選一。
頁面快取對已登入的會員或購物車頁面有效嗎?
效果有限。頁面快取最適合內容相同的未登入訪客,但對已登入使用者、會員專區或 WooCommerce 購物車這類每人內容都不同的動態頁面派不上用場。這類動態請求需要靠物件快取來加速。
為什麼要用 Redis 或 Memcached 來做物件快取?
WordPress 內建的 WP_Object_Cache 預設是非持續性的,頁面載入結束後快取就消失,下一個請求又得重跑所有查詢。掛載 Redis 或 Memcached 這類記憶體型後端後,查詢結果可持續保存,下次相同請求能直接從高速記憶體讀取,不必再查詢資料庫,前後台反應都會更流暢。
啟用 Redis 物件快取需要做哪些設定?
需要兩步:一是主機環境必須安裝 Redis 或 Memcached 服務;二是在 WordPress 安裝對應外掛(例如 Redis Object Cache),並在 wp-config.php 加入連線設定如 WP_REDIS_HOST、WP_REDIS_PORT 等,最後在外掛設定頁啟用並確認顯示為 Connected 狀態。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?