WordPress 網站很慢的時候,最常見的處理方式是直接加錢換更貴的主機方案,而這通常是八個檢查裡最後才該做的一個。原因很簡單:「慢」這個字底下至少藏著兩件完全不同的事——主機把網頁算出來要多久,以及瀏覽器把畫面畫完要多久。沒有先把這兩段分開,任何調整都是碰運氣。這篇按照「先量、再免費、最後才花錢」的順序,把 8 個檢查項目排好,每一項都寫出在哪裡查、看什麼數字、預期能拿回多少時間。
先講適用範圍:這篇處理的是既有網站變慢的診斷順序。如果你還在挑主機、想知道哪些規格會影響 WordPress 的速度,那是另一個題目,整理在WordPress 主機怎麼選;如果網站是十年前用 PHP 4.x 寫的舊架構、根本不是 WordPress,判斷該修還是該重做請看老網站升級還是重做。
| 順序 | 檢查項目 | 在哪裡查 | 動手成本 |
|---|---|---|---|
| 0 | 量 TTFB 與整頁載入時間 | 瀏覽器開發者工具 / curl | 五分鐘 |
| 1 | PHP 版本 | cPanel MultiPHP Manager | 十分鐘,需測相容性 |
| 2 | 頁面快取有沒有真的命中 | 回應標頭 | 一鍵啟用 |
| 3 | 壓縮與瀏覽器快取 | 回應標頭 / .htaccess | 兩行設定 |
| 4 | 外掛:哪一支吃掉時間 | 二分法停用測試 | 半小時 |
| 5 | 資料庫:autoload 與殘留資料 | phpMyAdmin | 半小時,先備份 |
| 6 | 媒體:原尺寸圖片 | 媒體庫 / 檔案大小 | 依圖片量 |
| 7 | 背景作業:wp-cron 與心跳 | wp-config.php / 主機排程 | 二十分鐘 |
| 8 | 第三方腳本與外部字型 | 開發者工具的網路面板 | 依數量 |
先量兩個數字,把「慢」切成兩半
在動任何設定之前,先取得兩個數字:TTFB(Time To First Byte,主機回應第一個位元組所花的時間)與整頁載入完成時間。前者衡量主機端,後者包含瀏覽器下載與繪製。兩個數字的關係決定你接下來要往哪個方向查:
| TTFB | 整頁時間 | 該查哪裡 |
|---|---|---|
| 0.1~0.3 秒 | 4 秒以上 | 瀏覽器端。往下跳到檢查 6、8(圖片與第三方腳本) |
| 0.8 秒以上 | 任何值 | 主機端。依序做檢查 1~5 |
| 時快時慢,同一頁差好幾倍 | — | 快取沒有命中,或同機資源被別人吃掉。先看檢查 2 |
量法有兩種。開發者工具的「網路」面板點第一筆文件請求,看 Waiting for server response 那一段,就是 TTFB。命令列的量法更適合重複比較,同一行指令多跑幾次看穩不穩:
要有個參照基準。我們在自家主機上對同一台機器的網頁量過三輪,扣掉 TLS 握手之後,主機端把一頁算完並開始送出大約是 2 到 13 毫秒——這是純手寫 PHP、沒有資料庫查詢的頁面,不是 WordPress,這裡只是用來說明「主機硬體本身能給你多少時間預算」。同一台機器上,一個沒有頁面快取的 WordPress 首頁會比這個數字高上一到兩個量級,因為每一次請求都要重新載入佈景與外掛、重跑 PHP、再對資料庫下數十次查詢。這中間的落差,就是後面幾個檢查要拿回來的東西。
主機層的三個檢查:PHP 版本、頁面快取、壓縮
檢查 1:PHP 版本——但效益可能沒有你想的那麼大
「升 PHP 版本網站就會變快」是流傳最廣的一句建議,實際上它只對某些人成立。我們在同一台主機上用同一支測試程式跑過各版本的 PHP,內容是字串處理、關聯陣列查表、浮點運算與雜湊序列化的混合,每版跑三次取最佳值:
| PHP 版本 | 執行時間(秒) | 相對 5.6 |
|---|---|---|
| 5.6.40 | 0.422 | 基準 |
| 7.0.33 | 0.189 | 少 55% |
| 7.4.33 | 0.148 | 少 65% |
| 8.0.30 | 0.142 | 少 66% |
| 8.1.34 | 0.146 | 少 65% |
| 8.5.10 | 0.147 | 少 65% |
讀法是這樣:從 5.x 跨到 7.0 是斷崖式的改善,7.4 之後就進入持平區間,7.4 和 8.5 的差距落在量測誤差範圍內。所以還停在 5.6 或 7.0 的網站,切版本是投報率最高的一步;已經在 7.4 以上的,請把注意力移到檢查 2。要說明的是,這是純 PHP 的微基準,不含資料庫查詢與網路傳輸,不能直接換算成 WordPress 的頁面時間——它回答的是「語言本身的執行速度差多少」,不是「你的網站會快幾秒」。
不過升到 8.x 仍然值得做,理由不是速度而是安全更新與外掛相容性:舊版 PHP 早已停止接收官方安全修補,而越來越多外掛在新版本要求最低 PHP 8.0。切換的做法在 cPanel 的 MultiPHP Manager,以網域或子目錄為單位指定。我們主機上實際並存 15 個 PHP 版本(5.3、5.4、5.5、5.6、7.0 到 7.4、8.0 到 8.5),所以可以先把測試站切上去跑一輪,確認佈景與外掛都正常再動正式站。
切版本前先做這三件事
- 先備份資料庫與檔案。切版本本身可以隨時切回來,但若切換後你順手更新了外掛,就回不去了。
- 先在測試站或子目錄試。最常出問題的是停止維護的老佈景、自訂的短代碼,以及使用了 PHP 8 移除函式的小外掛。
- 切完把錯誤記錄打開看一輪。有些相容性問題不會讓網頁掛掉,只會在背景每次請求都拋警告,反而把速度拖慢。
檢查 2:頁面快取有沒有真的命中
這是整份清單裡效益最集中的一項。頁面快取的作用是把 PHP 算好的 HTML 存起來,下一位訪客直接拿現成的,不必再跑一次佈景、外掛與資料庫。差別不是百分之幾,而是數量級。
問題在於「有裝快取外掛」跟「快取真的在用」是兩回事。常見的失效原因有:後台開了但規則沒套用到首頁、有外掛在每個頁面呼叫 session_start() 或設了 cookie 導致整站被判定為不可快取、佈景把購物車或會員資訊塞進共用區塊、或是快取被設成只在登出狀態生效但你一直登入著在測。
驗證方式是看回應標頭,不要只看外掛後台的綠燈。用無痕視窗(確保未登入)對同一個網址連續請求兩次:
第一次通常是 miss,第二次應該要看到命中的標記。如果第二次還是 miss,代表快取根本沒生效,先把這件事解決再往下走——因為後面的外掛與資料庫優化,在快取命中的頁面上根本不會被執行到。
我們的 Linux 虛擬主機跑在 LiteSpeed Web Server 上,標準配備含 LiteSpeed Cache(WordPress 外掛端一鍵啟用的伺服器端頁面快取,含圖片壓縮與 WebP 轉檔)與 AccelerateWP(在 cPanel 一鍵開啟物件快取、CSS 與 JS 最佳化、圖片延遲載入)。這兩層各自解決不同的問題:頁面快取處理「同一頁被很多人看」,物件快取處理「同一次請求裡重複查同樣的資料」。兩者能開的範圍與其他主機功能整理在虛擬主機能做到什麼。
檢查 3:壓縮與瀏覽器快取——兩行設定,體積少三分之二
HTML、CSS 與 JS 是純文字,壓縮率極高,而這件事只需要伺服器設定,不必動 WordPress 一行程式。我們對自家一篇文章頁做過對照,同一個網址只換 Accept-Encoding 標頭:
| 檔案 | 未壓縮 | gzip | brotli |
|---|---|---|---|
| 文章頁 HTML | 58,782 bytes | 22,092 bytes(少 62%) | 19,726 bytes(少 66%) |
| 樣式表 CSS | 11,610 bytes | — | 2,861 bytes(少 75%) |
對行動網路的訪客來說,少傳三分之二的位元組是實打實的秒數。檢查方式一樣看回應標頭有沒有 content-encoding: br 或 gzip;沒有的話在 .htaccess 用 mod_deflate 或 mod_brotli 指定要壓縮的 MIME 類型即可。同一個檔案順便設定圖片、CSS、JS 的瀏覽器快取期限,回訪的使用者連下載都省了。
WordPress 層的三個檢查:外掛、資料庫、媒體
檢查 4:外掛——用二分法找出吃掉時間的那一支
外掛數量本身不是重點,重點是「每一次請求各自吃掉多少毫秒」。有些外掛只在後台運作,前台零成本;有些外掛會在每一頁都插入一段外部請求,等到對方伺服器回應才繼續,這種一支就能拖垮整站。
不想再多裝一支分析外掛的話,二分法就夠用了:在測試環境把外掛停用一半,量 TTFB;哪一半改善明顯,就在那一半裡再切一半,四到五輪就能定位到單一外掛。十六支外掛用這個方法四輪就找得出來。找到之後的處理順序是:確認是否有輕量替代品、確認功能是否還在用、確認能否只在需要的頁面載入。
三種典型的高成本外掛
- 每頁都對外連線的外掛:社群動態、匯率、即時庫存、外部評論。對方慢,你就跟著慢,而且這段時間完全不在你的主機控制範圍內。
- 在前台跑複雜查詢的外掛:相關文章、熱門排行、複雜的篩選器。這類功能應該算好存起來,而不是每次即時算。
- 功能重疊的多個外掛:兩套 SEO 外掛、兩套快取外掛、兩套表單外掛同時裝著,除了浪費時間還常互相打架。
檢查 5:資料庫——autoload 與長年殘留
WordPress 每一次請求都會把 wp_options 裡標記為自動載入的資料整批讀進記憶體。這張表用久了會被外掛塞進大量設定,而外掛移除時往往不會清掉自己寫的資料。在 phpMyAdmin 執行下面幾條查詢,先看數字再決定要不要動手(資料表前綴不一定是 wp_,請改成你自己的):
幾個判讀要點。第一,autoload 這個欄位的值在不同 WordPress 版本並不相同(早期只有 yes 與 no,較新的版本另有 on、off、auto),所以先用 GROUP BY 看實際有哪些值,再決定條件怎麼寫。第二,自動載入的總量實務上控制在 1 MB 以內比較安全,WordPress 內建的「網站健康狀態」在這個數字偏高時也會出現提示。第三,修訂版本可以在 wp-config.php 用 WP_POST_REVISIONS 限制筆數,不必完全關掉。
清理之前一定要先匯出整份資料庫。這幾條查詢只是 SELECT,跑再多次都安全;真正刪資料的動作沒有回頭路,而且錯刪 wp_options 的關鍵設定會讓網站直接白畫面。我們主機端的資料庫是 MySQL 8.4,在 cPanel 就能直接匯出,花的時間遠比事後救援少。
檢查 6:媒體——上傳原尺寸圖是最常見的單一肇因
這一項通常不需要工程師。用手機或相機直接上傳的照片,一張動輒三到六 MB、寬度五千像素以上,而網頁上實際只會顯示八百像素寬。瀏覽器仍然得把整張下載完再縮小,流量與時間全都浪費掉。首頁放十張這種圖,光圖片就是幾十 MB。
處理原則三條:上傳前先把長邊縮到實際顯示尺寸的兩倍以內;優先輸出 WebP 格式(LiteSpeed Cache 的圖片最佳化可以自動轉);首屏以外的圖片使用延遲載入。做完這三件事再回去量一次整頁時間,通常是整份清單裡改善幅度第二大的一項,僅次於頁面快取。
最後兩個檢查,以及什麼時候才真的該換規格
檢查 7:wp-cron 與心跳機制
WordPress 預設沒有自己的排程器,它把到期的排程工作掛在「下一位訪客的請求」上執行。流量小的網站感覺不到,一旦排程堆積(定期備份、寄信、外掛的資料同步),倒楣的那位訪客就會等上好幾秒。標準做法是在 wp-config.php 關掉這個機制,改由主機端的排程固定間隔觸發:
另一個是心跳機制:編輯文章的畫面每隔十幾秒就會對 admin-ajax.php 送一次請求做自動儲存與鎖定偵測。一個人開三個編輯分頁,後台就會持續有請求在排隊。降低頻率或只在編輯畫面啟用,後台的操作感受會明顯不同。同理,如果網站沒有用到遠端發文,xmlrpc.php 也是常被自動化程式反覆敲的入口,關掉可以順便減少無謂負載。
檢查 8:第三方腳本與外部字型
這一段主機商幫不上忙,但它常常是「TTFB 明明很低、使用者卻覺得很慢」的答案。分析工具、標籤管理器、線上客服小工具、社群像素、外部載入的網頁字型,每一個都是一次額外的網域解析加連線加下載。開啟開發者工具的網路面板,把請求按網域分組排一次,就會看到有多少位元組其實來自別人的伺服器。
能做的三件事:把確定用不到的追蹤碼移除(通常會留下好幾個歷任廠商裝的);把網頁字型改成自行放在主機上,順便只保留實際用到的字重;剩下的腳本加上延後載入,不要擋住首屏繪製。
什麼時候才該換更大的規格?三個判準
- 頁面快取確認命中,TTFB 仍然偏高。代表回應本身就慢,而不是 PHP 算太久,這時才輪到硬體與資源額度。
- 網站性質讓快取命中率拉不上來。會員中心、購物車、每位訪客看到不同內容的頁面,本來就沒辦法共用快取,PHP 與資料庫的實際負載就是高。
- 需要 root 權限、常駐行程或長時間佔用 CPU。這已經超出共享環境的設計範圍,該直接看 VPS 或實體主機。
三種情況都不符合,就先別換方案。各類型主機的價格與規格差異整理在主機租用費用一年多少;如果是打算換主機商,搬移的順序與最容易出包的地方見網站搬家怎麼搬才不出包。
瑪尼國際成立於 2004 年,深耕逾 20 年,服務超過 500 家企業。我們處理 WordPress 變慢的案子時,順序跟上面這份清單是一樣的:先量、再把不用花錢的做完、最後才談規格。會這樣排,是因為多數網站在第 2 項到第 6 項之間就找到答案了。需要有人幫忙從主機端一路查到外掛端,或是希望把網頁設計、主機與長期網站代管交給同一組人負責,我們提供的一條龍服務就是為了避免「設計公司說是主機慢、主機商說是程式寫得不好」這種互踢皮球的狀況。
常見問題
Q:WordPress 網站很慢,直接換一台更貴的主機有用嗎?
先量過再決定。把瀏覽器開發者工具或 curl 量到的 TTFB(主機回應第一個位元組的時間)和整頁載入時間分開看:如果 TTFB 只有一兩百毫秒、整頁卻要五秒,慢的是瀏覽器端的圖片與腳本,換主機不會有改善;如果 TTFB 本身就要一秒以上,才輪到主機層。而且就算確定慢在主機層,順序也是先開頁面快取、再查外掛與資料庫,這三件事都不用花錢。真正該換規格的情況只有三種:頁面快取命中時 TTFB 仍然偏高、網站性質讓快取命中率拉不上去(會員或購物車頁面居多),或是需要 root 權限與常駐行程。
Q:WordPress 升級 PHP 版本可以變快多少?
要看你現在在哪一版。我們在同一台主機上用同一支測試程式跑過各版本 PHP,取三次最佳值:5.6 是 0.422 秒、7.0 是 0.189 秒、7.4 是 0.148 秒、8.0 是 0.142 秒、8.5 是 0.147 秒。也就是從 5.6 升到 7.0 執行時間少了約 55%,但 7.4 以後就進入持平區間,7.4 和 8.5 的差距在量測誤差範圍內。結論是:還停在 5.x 或 7.0 的網站,升級版本是投報率很高的一步;已經在 7.4 以上的網站,別再把 PHP 版本當成加速手段,該去查快取與外掛。要注意這是純 PHP 的微基準,不含資料庫查詢與網路傳輸,不等於 WordPress 的實際頁面時間。
Q:WordPress 後台很慢、前台卻正常,是什麼原因?
多半是三個背景機制之一。第一是 wp-cron:WordPress 預設把排程工作掛在訪客的請求上執行,後台每次換頁都可能觸發一批到期的排程。第二是心跳機制(admin-ajax.php):編輯畫面每隔十幾秒就會送一次請求,開著很多分頁時會互相排隊。第三是後台的儀表板小工具會連外抓新聞與更新資訊,外部網站慢就一起卡住。前台通常有頁面快取擋著,所以看不出來。處理順序是先把 wp-cron 改由主機端的排程固定間隔觸發,再調整心跳頻率,最後關掉用不到的儀表板小工具。
想找人把您的 WordPress 從主機端查到外掛端?
我們的 Linux 虛擬主機跑在 LiteSpeed Web Server 上,標配 LiteSpeed Cache 與 AccelerateWP、15 個 PHP 版本可自行切換,中華電信光纖機房不鎖頻寬,SSL 合約期間免費。
免費諮詢與健檢 →