View Categories

多語網站變慢?語言數、快取、資料庫三層查

< 1 分鐘閱讀

快速答案:多語網站變慢,通常是三層疊在一起:語言數(每多一種語言,頁面、選單、商品資料就多一份)、快取(每個語言各自一套快取,命中率被稀釋)、資料庫(翻譯與字串表越長越大)。先用 Query Monitor 比較同一頁的中文版和外文版,查詢數與載入時間差在哪,就知道該先處理哪一層。

為什麼會這樣 #

WPML、Polylang 這類外掛不是「翻譯」你的網站,而是替每種語言再建一份網站:頁面、文章、商品、分類、選單、Elementor 模板各自一份,全部放在同一個資料庫裡。WordPress 每次讀取內容都要多查一次「這篇是哪個語言、對應的翻譯是哪篇」,語言越多、內容越多,這個關聯成本就越高。

快取的問題在於分母變大:一個中文站有 200 頁,快取 200 頁就全站命中;同樣的站開六種語言就是 1,200 頁,訪客和爬蟲分散在各語言,快取產生得慢、過期得快,很多外文頁面根本沒被快取到就直接打資料庫。搜尋引擎與 AI 爬蟲也會把每種語言都爬一遍,主機負載等於乘上語言數。

資料庫則是慢慢長大:字串翻譯表把佈景、外掛的每一句文字都登記進去,開著「在頁面載入時尋找字串」這類自動登記功能,資料表會不停膨脹;每種語言的修訂版本也各自累積。

怎麼處理 #

  1. 先量。裝 Query Monitor,開同一頁的中文版和外文版,比較查詢數與載入時間。外文版明顯慢,多半是快取沒命中或翻譯關聯太重;兩邊一樣慢,就是主機或整站的問題,跟多語無關。
  2. 快取分語言確認。檢查快取外掛有沒有把各語言網址(/en//ja/)都納入預載;有 CDN 的話確認以網址而不是 cookie 區分語言,否則快取會互相汙染或整個失效。
  3. 關掉自動登記字串。WPML → 字串翻譯最下方的「在頁面載入時尋找字串」,找完字串就關,這是公認最常見的效能殺手。
  4. 清資料庫。不再使用的語言,確認內容都不要了再移除;清理修訂版本與過期暫存;看翻譯相關資料表的大小,過大的先備份再最佳化。
  5. 減少爬蟲重複抓。各語言 sitemap 正確、hreflang 對齊,沒翻譯的語言頁隱藏而不是顯示 fallback,避免爬蟲把同一份內容抓好幾遍。
  6. 最後才看主機資源。語言數翻倍、資料庫翻倍,原本剛好夠用的主機就不夠了;PHP 記憶體、資料庫連線數要跟著調,物件快取(Redis)在多語站的效果特別明顯。

我們實際遇過的情況 #

一個開了多種語言的產品型官網,客戶反映網站變得非常慢、點進產品詳細頁要等一陣子,也問過是不是語言太多、要不要升級主機。這種時候我們不先猜:照上面的順序量出慢在哪一層,再決定是清資料庫、補快取,還是真的該升級主機。語言多確實會讓每一層的負擔變重,但原因要量出來才算數。

什麼時候該找人 #

要動到資料庫清理、移除整個語言、或主機規格調整,做錯會把翻譯一起弄丟;速度問題若在 WPML 或快取外掛大版本更新後才出現,多半是相容性而不是設定。多語外掛怎麼選、語言數怎麼估,見多語外掛選擇那篇;fallback 頁的問題見多語 SEO 那篇

常見問題 #

多語網站為什麼比單語網站慢? #

每種語言都是一份獨立內容,查詢與關聯變多;快取也被分散到各語言,命中率下降,外文頁常直接打資料庫。

WPML 哪個設定最拖效能? #

字串翻譯的「在頁面載入時尋找字串」自動登記功能,開著會讓字串表不斷膨脹,找完字串就該關掉。

多語網站一定要升級主機嗎? #

不一定。先做快取分語言預載與資料庫清理,仍然慢再調 PHP 記憶體或加物件快取。

不確定網站慢在哪一層?免費健檢先看速度與快取;想有人每月幫你顧著多語站的更新與效能:網站守護方案