在過去幾年中,薇曉朵被問到最多的一些技術問題就是網站的速度優化方面,最簡單粗暴的方式就是提升硬件配置和網站內部結構優化,以及壓縮圖片視頻、 CSS/JS 、 CDN 、做 HTML 頁面緩存的方式。
對於這些傳統的網站優化方式大部分的中小型站點均適用,但如果你的網站流量和數據量都已經處於一個非常大的量級,那麼再做上面這些 「表面」 功夫得到的效果實際上是微乎其微的。
到了這個階段,我們需要做兩個決策:
1 、拆分現有站點的網站數據或者數據庫表,做多數據庫架構改造;
2 、嘗試添加對象緩存 (Object Cache) 來提升網站速度性能;
對象緩存涉及存儲數據庫查詢,當在您的 WordPress 站點上啓用時,它可以幫助加快 PHP 執行時間、減少數據庫負載並更快地向訪問者提供內容。
不是每次用户訪問網站時都加載網站的每個部分,而是對象緩存存儲數據庫查詢,以便在需要時更快地檢索內容。有很多不同類型的對象緩存,例如瀏覽器緩存、頁面緩存、移動緩存和用户緩存。
一、什麼是 WordPress 對象緩存?
對象緩存是一個存儲數據庫查詢結果的過程,以便在下次需要時快速恢復它們。緩存的對象將從緩存中迅速得到服務,而不是向數據庫發送多個請求。這更有效,並減少了服務器上大量不必要的負載。
簡單來説,對象緩存允許將經常使用的對象複製並存儲在更近的位置,以便更快地使用。
高效的數據庫允許大型高流量網站為世界各地的高質量媒體提供服務。
服務器超載會導致網站性能不佳和用户體驗不佳。當您在您的網站上設置對象緩存時,它將減輕您服務器的壓力並僅在需要時創建數據庫查詢。
舉個不太恰當的例子説人話就是:
無對象緩存:當有人訪問你的網站時,沒有對象緩存時是實時走數據庫裏調取數據,那麼每次查詢都會把所有數據表查詢一遍。類似一個房間裏有 100 個人,每個人都有自己的唯一編號及名字,當有人在門外叫喊編號比如 17,那麼房間裏的人就從 1 2 3 開始報數直到找到 17 。這種效率非常低,而且會增加太多無用的查詢時間。
有對象緩存:添加了對象緩存後就像是在這個房間裏,100 個人預先給他們列了一個名單掛在門口,然後當有人在門外叫喊編號或名字時可以精確的找到這個人,讓他直接出來,也就無需再進行逐個報數。
二、如何做 WordPress 對象緩存?
WordPress Object Cache 對象緩存目前最好用的兩個方案是 Redis 和 Memcached 下面我們會逐步講到。
注意:配置以下 Object Cache 對象緩存操作前需要在服務器中做出相應的基礎軟件配置,盲目安裝啓用相關插件可能導致站點崩潰,請聯繫專業人士進行服務器部署和插件規則配置工作。
1 、 WP Redis
Redis 是迄今為止領先的持久對象緩存 WordPress 插件之一。 Redis 是一個開源的內存數據結構存儲。它集數據庫、緩存和消息中心於一體。它適用於許多數據結構,例如字符串、哈希、列表、集合等。
Redis 具有許多強大的功能,包括內置複製、腳本和磁盤持久性。 Redis Sentinel 和 Redis Cluster 分別提供了額外的特性,包括高可用性和自動分區。內存數據集是 Redis 提供的高性能的關鍵特性。
您可以通過分配刷新和轉儲新數據的時間或在重新啓動 Redis 時記錄新更改以更新來編輯對象的持久性。或者,如果您需要定期更新內容,則可以禁用此功能。
最受歡迎的 WordPress 插件是 Redis Object Cache 對象緩存,安裝量超過 60,000 。它易於安裝和設置。激活插件後,導航到設置> Redis,然後單擊 「啓用對象緩存」 。
2 、 WP Memcached
Memcached 也是一個開源的分佈式內存緩存。與 Redis 類似,它用於通過減輕負載數據庫來優化動態 Web 進程的流量。 Memcached 將數據對象存儲在動態內存中。
一種簡單的思考方式是 「短期記憶」 。所有信息都存儲在 RAM 中,因此一旦空閒內存用完,最舊的數據就會被推出並替換。每當數據更改或過期時,Memcached 都會自動更新緩存以加載新內容。該軟件使用散列算法和不斷訪問和引用的內部散列表來跟蹤和調用所有數據。
有許多支持 Memcached 的兼容 WordPress 插件,安裝時會檢查以確保您的服務器上安裝了 Memcached 。 W3TC 是一個很棒的插件,它支持 Memcached(以及 Redis) 。安裝並激活後,導航到常規設置 > 頁面緩存方法並選擇 Memcached 。
三、誰需要 WordPress 對象緩存?
對於 Redis Object Cache 和 Memcached Object Cache 兩種技術方案如何選擇要取決於當前 WordPress 網站的規模和服務器架構,還有就是後續的開發方向。
薇曉朵 (Weixiaoduo.com) 網站現身説法的就是我們目前正在使用 Redis 對象緩存,不過並不是單一隻用 Redis,而是通過在 WordPress 網站內部優化和做緩存加速後再通過 Object Cache 對象緩存實現的加速。
同樣的,我們還做了以下工作:
- WordPress 靜態文件分離;
- WP Rocket 緩存加速;
- WordPress 全站 CDN 加速;
- WordPress 圖片 jpg 、 png 轉 webp 格式;
- WordPress 數據庫拆分為多數據庫分佈式架構 (進行中)
至於為什麼要做這些操作也是因為前幾個月被阿里雲的工程師給的回覆整懵了,我們網站速度變得奇慢無比,然後實在沒辦法了讓協助排查下原因,結果給到的回覆是我們的數據量太大導致掃描和執行時間過長。
幾億行數據要查詢近 7 個小時。
後面發現這樣下去確實不行,就測試了很多辦法,最後終於還是實現了想要的效果,雖然對目前的網站性能及速度並不是最佳,但依舊是保障了我們的業務和整個平台的平穩運行,這就是折騰的意義和目的了。
另外預告下
- Redis Object Cache (wpredis.com)
- Memcached Object Cache (wpmemcached.com)
更多信息及服務,過段時間可以通過對應 WordPress 小站找到。
發表回覆