Nginx下WordPress運行緩慢的解決方法:
wordpress運行緩慢優化的方法
1. 減少外掛程式的使用
這是首要的一點。大部分人往往都沒足夠的程式碼知識,更不可能做到每個插件的程式碼化,故大部分人都在用大量插件等。大部分的插件都會進行資料查詢與生成,這在頁面生成過程中 將耗費時間。如果剛好你的主機限制比較嚴格的話(為了均衡資源使用率),這個時間甚至會變得比較長。減少插件是非常必要的最佳化手段之一
2. 減少HTTP請求
每一次對於JS,CSS等檔案的存取都是一次HTTP請求。插件用得少,HTTP請求數自然就更少。速度自然快了
WP在每一次的頁面造訪時,都會判斷外掛程式的使用情況。讓WP做更少的判斷等於做更少的資料查詢。解放它的負擔吧。
3. 謹慎的選擇主題或手動優化
許多主題雖然漂亮但在優化方面做得併不算好,各種JS,各種CSS,各種背景圖片,各種空行,各種冗餘,這些都會影響到載入速度。不過這並不意味著不能選擇絢麗的主題,而是主題應該要基本滿足以下要求,或者你手動修改它使其滿足以下要求:
合併CSS和JS:將多個CSS合併為1個。
合併背景圖片:使用CSS Sprites將大部分的背景圖片合併為1個文件,同樣是減少HTTP請求,減少文件體積,加快渲染時間。
減少資料查詢:能用HTML直接輸出的地方就不要搞個資料查詢。
合理的JS和CSS位置:合理的將一些JS和CSS放置到網頁底部。
優化主題的背景圖片
4. 減少外部資源的使用
外部資源就是不在自己伺服器上的資源。使用太多的外部資源會遇到以下問題:
解析DNS的時間變長
每一個網域都是需要DNS解析才能夠正常運作。如果網站上的內容同時需要載入a.com,b.com,c.com,d.com這些網站的資源,那就 需要更多的時間去分別解析每個網域的DNS,建立連結。而同樣的,如果自己的網站是a.com,如果同時載入1.a.com,2.a.com這些類似的域名,也同樣會加長DNS解析時間。外部資源是不可能完全避免的,但能少則少。
外部資源的載入速度不可控
這主要是針對一些國外網站的內容而言,例如fickr,twitter等,因為眾所周知的原因,載入它們的資源會明顯減慢載入速度。而國內的站點相對來說速度還算是比較快。
5. 減少資料庫查詢,或使用資料庫快取外掛程式
許多的外掛程式都需要資料庫查詢,而上述關於外掛程式和主題的部分也提到了最佳化程式碼盡量減少資料庫的查詢次數。如果不懂,可以考慮使用資料庫緩存,它能夠將資料庫的查詢內容快取起來
#要注意的是,資料庫快取外掛程式不要和靜態化快取插件一起使用。因為兩者都是資料快取內容減少查詢,如果一起用就等於重複勞動。
6, 使用頁面靜態化快取外掛
靜態化快取外掛程式和資料庫快取外掛的原理差不多,都是將內容事先整理好並產生靜態的文件,當需要的時候直接拿出來,而不需要再去找、生成,浪費時間。快取過的靜態檔案基本上可以等同於一張靜態圖片,不需要執行太多複雜的內容。
還有一些其他優化的方法等,使用GZIP壓縮網頁、優化部落格文章圖片、使用CDN分散式網路加速靜態檔案等。
安裝wordpress外掛檢查緩慢原因
本站運行一段時間後,每次訪問首頁最多時候需要20秒鐘以後上, 訪問一個單獨文章頁面也要10秒,簡直不可接受,基本上都要崩潰了, 最後下定決心徹底解決它。
透過查閱大量資料, 參考前面一節的辦法對系統做了最佳化。
1. 首先屏蔽全部插件,發現系統問題依然存在, 打開首頁速度依然在10秒鐘左右
2. 透過httpwatch檢查http請求情況,發現訪問首頁中,取得php頁面時間是9秒鐘, 開啟圖片、js、css等時間是2~3秒鐘左右, 因此不是http請求過多造成的。
3. 開啟mysql資料庫的慢查詢,檢查資料庫的慢查詢情況,發現多數查詢都比較快,對一些查詢做了測試,速度非常快。因此資料庫因素也可以排除了。
實在沒辦法了, 最後考慮找wordpress外掛來研究一下在顯示首頁中都發生了那些內容,然後看看那裡佔用時間最長, 然後有針對的慢慢優化,只好這麼乾了。
到了wordpress網站,搜尋 debug插件, 搜尋了很多,試用了很多,都不太符合自己的要求。最後發現了一個插件“Debug Queries”,按照wp的舊習慣下載並且安裝,最後路下圖,點擊啟用按鈕開啟插件。
安裝完成外掛程式後,打開網站首頁,查看效果發現沒有任何變化
最後打開一個文章頁面,在文章頁面最下面發現了久久尋找的東西,路下圖:
圖中已經用不同顏色的區域做了一些標註
紅色區域: time:0.000xxxx 查詢需要的時間
綠色區域: Query: 查詢的sql語句
Call from: require,xxx 呼叫順序等等
然後下面是另外的呼叫。頁面顯示了本次頁面顯示過程呼叫了那些函數以及呼叫過程,以及需要的時間(資料庫的查詢時間,根據這個時間及總時間我們計算出php花費的時間)
最後頁面路下圖:
藍色部分:是本次存取資料查詢時間匯總, 可以看到查詢共花費了0.24秒, 發生了83次查詢(這個也說明wp插件帶來效能的問題,只是目前系統中資料量較少,還不至於影響系統的效能)
綠色部分:是本次使用者造訪過程中整體時間的匯總,這裡統計的應該是包括了php的整體時間。
紅色部分:是本次造訪的總時間
紫色部分: 本次造訪中花費在php程式中消耗的百分比。 97.5%
黃色部分:是本次訪問中花費在MySQL資料庫上時間的百分比2.5%
從上面資料我們可以看到, 一次10秒鐘的使用者存取中, mysql花了時間僅佔2.5%因此可以肯定這次10秒鐘的存取問題出在mysql以外的環節上,主要應該是php的問題。
重新啟動php進程解決緩慢問題
從上面部門的分析我們已經可以了解到問題很可能出在php上面,排查php問題,不是我的專長,因此決定重新啟動php行程看看效果。
1. 尋找php進程
輸入su – 指令,切換端到root帳號下
在輸入:ps -ef | grep php 指令,查看php進程,如下
從圖中我們可以了解到php進程id 是26765,進程名稱php-fpm(這個是nginx需要的php程式)。
2. 尋找php進程的啟動路徑
輸入如下指令lsof -p 8584(這裡的8584是在進行問題解決時php進程的id,上面26765還是最近寫文章是查找的進程的id)
3. 關閉進程
kill -9 8584 關閉老的php進程
有的時候php開闢了很多進程,不好關閉,可以採用下面的辦法進行
killall php-fpm (本站就是採用這個辦法進行的)
4. 重新啟動php進程
#輸入如下指令
/usr/sbin/php-fpm 重新啟動流程
更多wordpress相關技術文章,請造訪wordpress教學欄位進行學習!
以上是nginx中如何優化wordpress的詳細內容。更多資訊請關注PHP中文網其他相關文章!