WordPress 來聊聊使用越久越慢問題

這個越用越慢問題,大多不外乎是外掛用太多、資料過多、硬體效能不足所導致,我以資料庫結構與使用習慣來兩方面來聊聊,這是我的觀察與工作上遇到的實際狀況,真的什麼鳥事都有,大家可以參考看看!

WP 使用習慣

使用習慣方面,對於剛進入使用 WP 架站或是已在使用 WP 進行開發的使用者,請勿正式環境上進行測試與開發,請在測試環境下進行,最終完成時!再將安裝 WP 與資料庫遷移至正是環境,這非常重要!

工作接手一個詭異 WP 文章並數不多,只有一千五百多筆文章,在前台搜尋文章卻需要39秒才能得到搜尋結果,雖然大量使用自訂欄位,一篇文章差不多開了四十幾個自訂欄位,但應該還好不會這麼慢才對,將 WP 與資料庫遷移到本機測試環境也是一樣慢,另一個詭異現象,後臺文章狀態!全部文章一千五百多篇,回收桶文章一千五百多篇,兩個文章狀態內的文章居然是依樣😵‍💫這真的搞得我好亂,上位仁兄還想使用暫存快取外掛來解決搜尋過慢問題,一樣沒用!,我發現有大量外掛使用與未啟用,也發現主管使用習慣,沒有測試環境,都直接 Online 作業修改,我大膽猜測上位仁兄應該也是如此,我無言😶WP 應該是被玩壞了!這個 WP 應該沒救了,只能重新安裝 WP 應該可以解決。但最後我整合一下需求與功能使用,改採 LARAVEL 框架來完成使用系統,在系統維護上會比較省力。

對於剛進入使用 WP 架站的人,要建立測試環境並不一定要去花錢租主機,市面上有很多可以在本機電腦架設伺服器的方法,例如:Larago、XMAPP ,開發佈景主題或是外掛都足夠,開發完成再將功能上傳到正式環境的 WP,別再正式環境做測試把 WP 搞到秀斗後,就這樣使用,帶來無法解決的問題。

WP 資料庫結構

資料庫這部份網路上比較少人寫,有進入門檻,對於只使用現成佈景主題與外掛的人也不需要去了解,反正越用越慢就慢,接下來的內容可能會有點悶,會解釋一些 WP 資料表與資料庫運作的關係。

文章自訂定欄位過多會產生大量 _postmeta 資料,WP 的自訂欄位的方便性,可以說歸功與 ACF 外掛的方便使用,也造成了一些使用上的亂象,WP 資料庫中的 _postmeta 資料表,這個資料表負責的資料非常多,自訂欄位是一種,一個自訂欄位就會佔一筆資料,使用 ACF 外掛產生的自訂欄位,一個欄位自訂欄位會佔三筆資料,新增一篇文章的自訂欄位空值一樣會佔資料筆數,還有文章上傳圖片到媒體庫也會記錄在這張表,其他資料就不再贅述。

所以 _postmeta 資料表會很雜,在過多的自訂欄位前提下,資料表就會肥大起來,工作上遇到 _postmeta 資料表肥到 2G 的容量,文章資料表 _posts 卻只有 50 幾 MB,但只有七萬多筆文章,一篇文章約五十幾個自訂欄位,這將會導致前台搜尋或提取資料時會很慢,來解釋一下 _postmeta 與 _posts 資料表的欄位資料結構差異,如下圖:

_posts 資料表,一篇文章等於一筆橫向資料來記錄一篇文章的內容,包含基本的標題、內容、狀態、時間…等等,而 _postmeta 資料表來記錄一個自訂欄位的資料,等於一筆橫向資料,這樣看個出差異了嗎!假設一篇文章有 50 個自訂欄位,那 _postmeta 就會產生 50 筆資料,如果這樣換算一下,文章數3000×50(自訂欄位數)=150000(_postmeta資料筆數),當文章數越多,_postmeta 資料表筆數會以倍數成長,如過是使用 ACF 外掛來產生自訂欄位,筆數就要變三倍,這就是 _postmeta 會肥的原因,這會造成搜尋或提取資料變慢的原因。

如上圖,當使用 WP_Query 來提取資料時會先將 _posts 與 _ postmeta 兩ˋ張資料表 JOIN 後形成一張表後再進行搜尋或提取動作,當 _postmeta 資料表筆數越來越多時,JOIN 所花的時間就越久,但是可以靠提升硬體效能來加快速度,但還是會有瓶頸,當過慮的條件越多就會越慢,七萬多篇文章造成 _postmeta 資料表有 2G 的容量也不為過,況且並不是只有自訂欄位的資料。

最後

WP 並不適合當作相簿網站,上傳圖片也以前台顯示尺寸為準,例如前台顯示圖片像素只需要 640×480 px,卻上傳 1920x1200px 的圖片,像這樣後續要遷移檔案就很痛苦,這我就不贅訴,碰到才會知道痛😏

雖然 WP 自訂欄位很方便,但也不要當隨便,WP 的應用也並不是侷限在架網站,有些會當作公司內部資料登載的系統,主要目的做為資料管理,會開啟大量的自訂欄位,資料量一多變慢的情況就會出現,如上述提到,如果不使用文章原本欄位,可以直接自訂資料表方式,這樣欄位可以自己定義,就也不會產生肥大的資料表。

WP 是內容管理系統(CMS),但原本框架還是以部落格或一般網站為主,要做其他用途的擴充,還是需要考慮一下資料結構與需求和應用,外掛的使用也需要三思,後續維護也是有機會被外掛搞到不要不要的😭如 ACF 外掛以安全性問題更換函式,我當時接手六個 WP 維護,六個佈景主題,我就需要在六個佈景主題檔案中找尋替換掉函示,有夠累的, 就聊到這掰!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *