在過去幾年中,薇曉朵被問到最多的一些技術問題就是網站的速度最佳化方面,最簡單粗暴的方式就是提升硬體配置和網站內部結構最佳化,以及壓縮圖片影片、 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 小站找到。
發表回覆