網站卡頓?別只會裝快取!資深工程師教你用 Query Monitor 揪出效能殺手

2026/01/15 | WP 開發技巧, 技術教學資源, 架構與效能優化

網站不再卡頓:資深工程師的 Query Monitor 實戰指南

網站「卡卡的」讓你心煩嗎?別再只會安裝快取外掛!資深工程師 Eric 強調,在不知道病因前盲目投藥只是浪費資源。我們將教您使用 Query Monitor(QM)這把工程師的手術刀,精準揪出 WordPress 效能殺手。無論是經典的 N+1 重複查詢、未加索引的慢 SQL,還是隱藏的 HTTP API 延遲,QM 都能提供鐵證,讓您從根源解決問題。網站優化靠的是「證據」,而非「感覺」。停止猜測,開始行動!立即預約您的 WordPress 技術健檢,讓我們資深團隊助您根除技術債,讓網站真正飆速!

需要專業協助?

聯絡浪花專案團隊 →

網站卡頓?別只會裝快取!資深工程師教你用 Query Monitor 揪出效能殺手

嗨,我是 Eric,浪花科技的資深工程師。每天早上打開 Slack,最怕看到的不是系統掛掉的警報(那個通常很好修,重啟治百病嘛),而是客戶傳來一句:「Eric,我覺得網站好像變慢了,雖然還可以開,但就是卡卡的。」

「卡卡的」是一個工程師最痛恨的形容詞。是網路慢?是資料庫慢?還是你電腦開了五百個分頁?大部分的新手站長遇到這種情況,第一反應就是:「裝快取外掛!」或是「升級主機!」

先等等,別急著掏錢。如果你不知道病因就亂投藥,那叫安慰劑效應。今天我要教大家用工程師的手術刀——Query Monitor,精準切開 WordPress 的肚子,看看裡面到底是哪一段程式碼在搞鬼。這不是一篇單純的外掛介紹文,這是我這幾年來幫客戶「抓鬼」的實戰筆記。

為什麼你需要 Query Monitor?這不是有 WP-Debug 嗎?

WordPress 內建的 WP_DEBUG 雖然好用,但它只能告訴你「哪裡出錯了(Error)」,卻沒辦法告訴你「哪裡慢了(Performance)」。

很多時候,網站沒有噴錯,但就是跑得像烏龜。這通常是因為:

  • 資料庫查詢過多:也就是經典的 N+1 Query 問題,一個頁面撈了 200 次資料庫。
  • 外掛衝突:某個外掛在後台默默執行了耗時的 API 請求。
  • 記憶體洩漏:某個迴圈把 PHP Memory Limit 吃乾抹淨。

Query Monitor (QM) 就是為了解決這些問題而生的。它能掛在你的 Admin Bar 上,即時顯示當前頁面的所有技術指標。作為開發者,如果你的開發環境沒裝這個,那你就像是蒙著眼睛在寫 Code。

第一刀:解剖資料庫查詢 (Database Queries)

安裝好 Query Monitor 後,隨便打開一個前台頁面,看向頂端的 Admin Bar。如果有紅字或橘字,恭喜你,抓到兇手了。點開選單,選擇 Queries

1. 揪出慢查詢 (Slow Queries)

Query Monitor 會列出所有執行時間超過 0.05 秒(可設定)的 SQL 指令。我常看到有些外掛為了撈出「熱門文章」,寫了超級複雜的 JOIN 查詢,結果沒加 Index,直接讓 MySQL 進入「全表掃描 (Full Table Scan)」的地獄。

工程師碎碎念:
看到慢查詢,請先檢查你的資料表有沒有適當的索引。如果是外掛造成的,且你無法修改程式碼,請果斷停用該外掛或尋找替代品。不要試圖用快取去掩蓋一個寫得很爛的 SQL,那只是把炸彈往後延而已。

2. 識別重複查詢 (Duplicate Queries)

這是我最常抓到的問題。請看以下這段範例程式碼:

// 錯誤示範:在迴圈中不斷查詢資料庫
foreach ( $product_ids as $id ) {
    $product_name = $wpdb->get_var( "SELECT post_title FROM wp_posts WHERE ID = $id" );
    echo $product_name;
}

如果你有 50 個商品,這裡就會執行 50 次 SQL 查詢。在 Query Monitor 的「Duplicate Queries」分頁中,如果你看到同一條 SQL 語句出現了幾十次,這就是兇手。解法是改用 WHERE ID IN (1, 2, 3...) 一次撈出來,或是使用 WordPress 的 Object Cache 機制。

第二刀:HTTP API 請求 (HTTP API Calls)

這是一個隱藏的效能殺手。現代的外掛都很喜歡「打電話回家」,比如檢查更新、同步授權、或是抓取 Instagram 的最新貼文。

如果你的網站「偶爾」會卡住 5-10 秒,通常就是 HTTP Request Timeout 造成的。PHP 是單執行緒的,當它在等外部 API 回應時,整個網頁就會卡在那裡轉圈圈。

在 Query Monitor 中點選 HTTP API Calls,檢查:

  • 有沒有回應時間超過 1 秒的請求?
  • 有沒有回應代碼非 200 的請求(如 404, 500, 502)?
  • 是不是在「前台」執行了不必要的 API 呼叫?(這種應該盡量移到背景排程 Action Scheduler 處理)。

第三刀:Hooks 與 Actions (Hooks & Actions)

有時候,資料庫很快,API 也沒問題,但 TTFB (Time To First Byte) 就是很高。這時候就要看 PHP 的執行效率了。

WordPress 是由無數個 Hooks 組成的。Query Monitor 可以告訴你哪個 Hook 掛載了哪些 Function,以及它們被觸發了幾次。雖然 QM 免費版不能像 Xdebug 或 New Relic 那樣精確到微秒級的 Profiling,但它能幫你快速縮小範圍。

實戰案例:
有一次我發現客戶的結帳頁面超慢,透過 QM 發現 woocommerce_checkout_process 這個 Hook 被觸發時,某個行銷自動化外掛一口氣執行了 3 秒鐘的邏輯運算。解決方案?把那個外掛的邏輯改成非同步處理(Asynchronous)。

第四刀:環境與 PHP 相容性

隨著 PHP 8.2、8.3 的普及,很多老舊的 WordPress 外掛開始噴出大量的 Deprecated 警告。雖然這些警告不會直接導致網站掛掉,但大量的 Log 寫入硬碟(error.log)和螢幕輸出,絕對會拖累效能。

Query Monitor 的 PHP Errors 分頁會幫你整理好這些警告。如果某個外掛瘋狂噴錯,這就是一個強烈的訊號:該外掛已經缺乏維護,是時候尋找替代品了。

工程師的總結:數據不會說謊

網站優化不是靠「感覺」,而是靠「證據」。Query Monitor 就是你的搜證工具。在安裝快取外掛(如 WP Rocket 或 LiteSpeed Cache)之前,請務必先用 QM 把底層的病灶找出來。

記住 Eric 的這句話:「快取是為了讓快更順暢,而不是為了掩蓋慢的事實。」如果你的資料庫查詢本身就要跑 5 秒,快取失效的那一瞬間,你的伺服器就會被塞爆。

常見問題 (FAQ)

Q1: Query Monitor 可以在正式環境 (Production) 使用嗎?

可以,但建議只在需要除錯時啟用。因為 Query Monitor 本身也會消耗資源來記錄這些數據。除錯完畢後,建議停用外掛,或者透過設置 Authentication Cookie 讓它只對管理員生效,避免影響一般訪客的效能。

Q2: 為什麼我看不到 HTTP API Calls 的分頁?

這通常是因為當前頁面沒有觸發任何外部 HTTP 請求。這其實是好事!代表你的頁面載入不依賴外部服務。如果你確定有 API 呼叫卻沒顯示,可能是該請求是在 AJAX 或 REST API 中執行的,你需要監控對應的請求。

Q3: 看到紅色警告就一定要修嗎?

不一定。有些紅字是「False Positive」或者是非致命的 PHP Notice。重點應該放在「Slow Queries」和「Duplicate Queries」以及回應時間過長的 HTTP 請求,這些才是直接影響使用者體驗的關鍵。

如果你的網站經過 Query Monitor 診斷後,發現是資料庫架構或客製化程式碼的問題,光靠調整外掛已經無法解決,那麼你可能需要更深度的技術介入。

別讓技術債拖垮你的業績! 歡迎聯繫浪花科技,讓我們資深的工程師團隊為您的 WordPress 進行一次深度的「核磁共振」檢查。

延伸閱讀:

 
立即諮詢,索取免費1年網站保固