WordPress 性能優化:為什麼我的博客比你的快

WORDPRESS 很慢?

很多同學都說 WordPress 很慢,但是作為全世界最常用的建站和博客系統 WordPress 來說,我相信在性能設計上肯定不會有太大的問題,WordPress 開發團隊也肯定也考慮到這個問題。

那麼 WordPress 效率問題主要是出在哪裡呢?根據我多年 WordPress 建站和維護的經驗,很多性能的問題都是 WordPress 使用不當造成的,比如安裝太多效率低下的外掛程式,使用代碼品質低下的主題,沒有正確處理 WordPress 的緩存等等,所以提高 WordPress 性能,就要從這些方面入手。

今天就結合實際案例:App每日推送 這個使用 WordPress 構建的網站,給大家講講自己多年總結的 WordPress 優化經驗和技巧:

關於 APP每日推送

首先簡單介紹下App每日推送這個網站,它是基於 WordPress 構建的 iPhone/iPad 應用推薦服務,這是目前我做過最複雜的 WordPress 網站,有多重篩選{可以通過設備(iPhone/iPad/通用),價格(免費/限免/收費)分類(遊戲/應用/工具等等)選擇 App},使用者動態(可以關注,喜歡,發表評論,發佈和回復帖子),討論區,消息通知,使用者積分,積分兌換等等功能。

並且整個網站每個月的流量超過 500 萬PV,但是網站目前的速度很快,大部分頁面在 0.1 秒內生成,並且每個頁面基本保持只有 2 條 SQL 查詢,比如首頁:2 queries in 0.063 seconds。

那麼我們是怎麼進行優化的:

靜態檔優化

網站的靜態檔一般有兩種:第一種是網站的 CSS,Javascript 和一些主題的常用背景圖片和按鈕檔,這些圖片如果網站不進行改版或者其他改動,基本上是不會修改的,第二種是每天更新的網站內容中上傳的圖片或者附件,這些圖片檔也是基本不會改動的。

解決好靜態檔存儲和加速,網站性能就首先能得到基本的保證了,WordPress 構建的網站和博客也是一樣的。對於這些靜態檔來說,最好的解決方案永遠是使用 CDN 網路進行加速,這樣伺服器的壓力將大大降低,因為訪問頁面只有當前頁面是在自己伺服器上,其他所有圖片 JS CSS 都是從 CDN獲取的。

從使用便捷性和性價比角度來說,個人推薦 WordPress 博客最方便使用的 七牛雲存儲。

伺服器優化

優化好靜態檔之後,就要開始對網站的動態內容進行優化,優化動態內容,首先要有一個穩定網路環境,穩定的主機供應商和伺服器性能的優化。

選擇一個靠譜的主機託管商,在國內這個很多時候讓你抓狂,但是只要努力還是可以的。個人選擇 BGP 或者多線機房,讓全國用戶訪問都能有不錯的速度,然後儘量選擇獨立的伺服器,再不濟,也得 VPS,  因為你沒有伺服器的 Root 許可權很多東西是無法進行的(個人博客可以考慮選擇我愛水煮魚目前使用的 Media Temple 這類的 VPS 主機),當然你也可以找我合租,速度肯定非常強悍。

伺服器問題解決之後,伺服器可以做如下優化:

Web 伺服器選擇使用 Nginx:效率和併發比 Apache 高,系統資源消耗低,這個不是必須,個人站長使用 Apache 也可以。

MySQL 設置 MySQL Query Cache,可以保存保存查詢結果,同樣的查詢不再從資料庫檢索,對速度有很大的提升。

使用 eAccelerator 加快 PHP 腳本的執行效率:把經過編譯後的 PHP 代碼緩存到共用記憶體中,並在使用者訪問的時候直接調用從而起到高效的加速作用。

WORDPRESS 緩存機制和如何緩存

要徹底明白和搞懂 WordPress 性能優化,首先要理解 WordPress 緩存機制,WordPress 默認是一種叫做 WordPress Object Cache 的物件緩存機制,它是把需要緩存的內容按照 Key-Value 這樣的模式進行緩存(和 No-SQL 的 key-value 的有點類似),當然它還支持按照 Group 來劃分和避免緩存的內容衝突。

所以最基礎的 WordPress 緩存外掛程式就是,把 WordPress 產生的 Key-Value 存起來,如果是使用 Memcached,就是存到記憶體,如果使用 Flie 就是存到硬碟中,當然高級的 WordPress 外掛程式還能做更多,比如 WP Super Cache把整個頁面緩存到硬碟中,下次直接訪問靜態的 HTML 檔,讓伺服器直接繞過 PHP,節約 CPU 時間。 Batcache 會把整個頁面當做一個物件存到記憶體裡面。

App每日推送 由於註冊用戶操作比較頻繁,不適合 WP Super Cache 這樣的靜態緩存,對硬碟讀寫太多,討論區又無法緩存,我們使用 Memcached 和 Batcache 搭配的記憶體緩存模式:

對於已登陸的用戶,Memcached 會把 WordPress 的物件存到記憶體裡面,伺服器的記憶體足夠大,讀取和存儲速度也夠快,並且記憶體緩存命中率也大於 94%。另外我們 WordPress 程式經過優化,每個頁面的查詢一般在 2 條左右,所以整個網站效率很高。

對於未登錄的使用者,Batcache 會把整個頁面當做一個物件存到記憶體裡面,未登錄使用者訪問的時候,整個頁面從記憶體中取出,速度奇快。

WORDPRESS 程式優化

WordPress 程式優化是基於 WordPress Object Cache 的機制對 WordPress 外掛程式和主題進行優化,主要經驗有以下幾點:

只使用必須的 WordPress 外掛程式,安裝太多的 WordPress 外掛程式很容易引起性能問題。
從正規網站下載 WordPress 主題,這樣下載的主題才能保證品質和安全。
WordPress 主題和外掛程式儘量使用範本函數,因為 WordPress 範本函數如果可能都已經做好了 WordPress Object Cache。
比如 get_the_terms 和 wp_get_object_terms 這兩個函數,功能基本一樣,但是 get_the_terms 直接從物件緩存中取資料,無查詢,而 wp_get_object_terms 每次都從資料庫中取資料。
WordPress 外掛程式和主題如果一定要直接查詢資料庫,請做好 Object Cache,將查詢的結果使用 wp_cache_set 存到 Object Cache 中,下次直接使用 wp_cache_get 獲取。

WORDPRESS 性能優化總結

選擇好的伺服器和託管商,對 WordPress 程式進行優化,並且做好緩存,WordPress 效率其實很高的,加上 WordPress 本身的靈活性和功能強大,WordPress 作為各種建站絕對是非常不錯的選擇,所以我一直使用 WordPress 建站。

另外這裡還有一份我總結的關於 WordPress 性能優化的 PPT: http://vdisk.weibo.com/s/2QR2M,內容略有補充。也歡迎大家和我交流 WordPress 優化方面的技巧。

WPJAM DEBUG 外掛程式

最後補充一個 WordPress 性能檢測的外掛程式:WPJAM Debug,可以在頁腳顯示當前頁面有多少條 SQL 查詢,頁面生成花了多少時間,並且把 SQL 按照執行順序和按照耗時兩種方式列出,通過這樣的方式幫你分析 WordPress 哪條 SQL 查詢有問題或者比較慢,然後著手改進它。

當然我們的 WordPress Jam 也提供 WordPress 性能優化外包服務,也可以通過聯繫頁面聯繫我們幫你們優化。另外我們也提供經過優化的 WordPress 主機。

速度體驗:http://reccalee.com,http://wpjam.net。

 

WordPress 3.6 新功能概述

WordPress 已經發佈了 3.6 的 beta 3 的測試版,那麼 3.6 有哪些新功能呢?

日誌格式:現在日誌格式有了全新的 UI,主題作者可以通過範本函數實現結構化資料。

Twenty Thirteen:全新的 Twenty Thirteen(2013)主題。Twenty Thirteen 是一個具有豐富選線,色彩豐富,以博客為中心的主題,並且全面支援日誌格式。

音訊/視頻:現在你無需外掛程式或者協力廠商媒體託管服務,就可以在日誌中嵌入音訊或者視頻了。

自動保存:日誌將自動保存到本地,如果你的流覽器掛掉,或者電腦死機,設置伺服器下線,你都不會丟失你撰寫的日誌。

日誌鎖定:可以看到有人正在編輯某篇日誌,並且如果他長期沒有動靜,可以將他踢出去。

導航菜單:導航功能表被簡化成可以折疊的 UI,並且可以通過一個單獨標籤來實現批量編輯分配功能表的位置。

日誌修訂:許可權的日誌修訂 UI,可以滾動選擇修訂歷史,並且支援高亮顯示兩個版本的不同之處,還可以快速恢復到任何修訂版。