明月的 WordPress 優化思路總結

提及 WordPress 優化來算是一個老生常談的話題了,最近明月從折騰 CDN 轉移到折騰 WordPress 優化加速,只能說是國內 CDN 服務水平真是岑差不齊,適合像明月這樣的草根苦逼博客使用的寥寥無幾,好不容易碰到了「全速雲 CDN 」還由於價格太高暫時只能放棄(等明月成「土豪」的時候我再考慮吧!能成「土豪」嗎?不能嗎?能嗎?)。html

最後只能是轉回身來繼續「蹂躪」 WordPress 了,目前來看,通過這近半個月的折騰初見成效了不管是大流量的主站【玉滿齋】仍是廉價虛擬主機的博客速度都有了明顯的提高,穩定性目前明月本身徹底能夠接受。今天明月就結合前人們(或者應該叫前輩大咖們)的 WordPress 優化作一個優化思路上的總結吧!
30.jpg
很喜歡這個圖片,跟個人文章主題真是太貼切了!前端

爲何說是「思路」而不是具體的技術教程呢?其實很簡單,只有思路清晰了才能夠有的放矢具體操做嘛!之前明月也是有一個很大的誤區,那就是博客網站的運行速度=服務器主機的硬件配置,自從開始折騰 CDN 起,這個觀點就一直在動搖直至如今幾乎已是蕩然無存和嗤之以鼻了!爲何?下面從我整理的幾點WordPress 優化思路你們應該能夠窺探一二。數據庫

1、服務器主機配置對訪問速度有多大的決定性?

不少站長應該都面臨過選擇博客網站主機服務器配置時的糾結,明月其實剛開始時也有這樣的經歷,原本我對服務器瞭解就是朦朦朧朧的,但一個基本點我是清除的,那就是服務器和咱們用的我的電腦(不管是臺式機仍是筆記本甚至平板)實際上是徹底不同的,雖然都能稱之爲是電腦,但其運行側重點是不一樣的。服務器的CPU/內存/硬盤/主板/機箱都有很大的區別,簡單點兒理解就是:編程

服務器至關於普通士兵,講究協同做戰,崇尚人多力量大的真理,一個不行來十個,十個不行上一百個。可是都聽命令行事,指哪打哪。七牛雲存儲

家用至關於特種兵,幹什麼都行,綜合素質高,精通各類暗殺,潛入技能。作起事來槓槓的,可是雙拳難敵四手,任務一複雜,就搞不定了。緩存

因此,服務器配置決定的應該更可能是「併發」類的運算能力,處理數據是看同時能夠處理多少任務量。理解了這點兒其實就夠了。安全

說會咱們的主題,影響網站訪問速度對服務器來講就是看同一個時間段有多少併發的http請求量須要服務器來運算處理,網站前端能夠理解成同時有多少客戶端訪問請求。若是你的博客網站一分鐘內的在線訪問人數是5個,那麼服務器就是處理5個併發的運算請求。好吧,一分鐘內都會有5個訪問者,一小時是300個,恭喜你呀,網站一上線日IP都上千了,牛逼呀!這種事兒會發生嗎?會,但照明月的經驗看,最起碼是博客網站堅持天天更新三年之後纔會有這樣的訪問量,新站沒有很強大的引流方案,這是不可能的。(百度統計裏面的「實時訪客」就能夠觀察你網站試試在線人數,談不上準確,但基本上仍是能夠參考的),下面上個百度統計裏的實時訪客統計截圖:
20170220025506.png
這是我主站凌晨02:54分的實時在線人數
20170220025522.png
這是我博客凌晨02:55分的實時在線人數性能優化

博客的是否是很慘,這個0估計要保持到明天早上纔會有變化了!囧!服務器

說了這麼多其實明月就是想告訴你們主機服務器配置對訪問速度的影響幾乎是微乎其微的,日IP在500一下的時候,對100多元的虛擬主機配置都沒有任何壓力,估計也就是日1000IP的時候纔是考驗配置的時候,因此動輒就上ECS主機的在我眼裏就是「土豪」,有錢人呀!網絡

綜上所述,主機服務器配置對博客網站訪問速度的影響很小,只有訪問量大的時候纔是考驗服務器配置的時候,無訪問量或者訪問量低於日IP1000之內的都不是配置低的因素。

2、WordPress 很慢嗎?

WordPress 很慢,這是不少人都在說的,我記得此論調也就是這幾年才流行開的,聽說是由於一個臺灣的 WordPress 大咖在本身博客上宣稱「由於 WordPress 性能太差放棄使用」相似的言論後才流行開的,因而乎 WordPress 很慢就成了指責 WordPress 的有力理論依據了。

關於技術層面的東西,明月說很差(實際上是真不懂!),我多年來也只是使用 WordPress 來建站歷來沒有想過更換,就我那點兒早年間C/C++、PHP基礎,我能理解 WordPress 代碼方面有多優質(再次膜拜一下Matt·Mullenweg大神,19歲時不是學編程專業的狀況下開發出了 WordPress !跪了!具體你們可參考【WordPress代碼質量怎麼樣?】一文),因此我歷來不相信「 WordPress 很慢」這一說,目前國內使用 WordPress 很慢的主要緣由其實就是由於「牆」的存在, WordPress 自身會調用不少「庫」,而這些「庫」大部分都是「牆」外的,這自己就拖慢了運行速度,不少站長都知道使用 WordPress 後要關閉對 Google 字體的調用,雖然新版 WordPress 已經去掉 Google 字體了,但還有很多調用是須要「牆」外的http請求的,固然這些請求目前國內已經有不少第三方提供的來使用了,因此這個影響如今幾乎是微乎其微了,固然前提是你得會替換這些http請求,這點而咱們之後再去探討。

WordPress 值得讓人膜拜的最主要緣由就是「兼容性」和「可擴展性」這兩點, WordPress 插件、主題最豐富這是目前全球任何一個網站系統都不得不認可的現實, WordPress 能佔有全球互聯網 38% 的份額絕對不是吹出來的,這兩點我感受是很重要的。兼容和擴展實際上是把雙刃劍,由於你無法要求全部的開發者的水平都像 Matt·Mullenweg 那樣的神乎其神,這就相似蘋果手機運行就是比Android手機快是一個道理,蘋果最大的敵人是封閉,Android最大的敵人是開放。 WordPress 慢其實很大一部分緣由就是插件甚至主題形成的,這點也從明月最近幫人優化網站獲得了證明。

固然,還得提一下攻擊、後門、木馬、黑鏈植入等等這些「黑客」手段對 WordPress 運行的影響,這些其實大部分也是使用了不乾淨的、破解版插件和主題引狼入室的,因此我在【博客站長務必要養成的好習慣】一文裏專門強調了插件使用也是一個須要養成的。

綜上所述「 WordPress 很慢」其實也不是影響網站訪問速度的罪魁禍首。

3、影響訪問速度的有哪些?

不少博主都會感受WordPress很慢?做爲全世界最經常使用的建站和博客系統WordPress來講,在性能設計上確定不會有太大的問題,WordPress開發團隊也確定也考慮到這個問題。

那麼WordPress效率問題主要是出在哪裏呢?

根據我多年WordPress建站和維護的經驗,不少性能的問題都是WordPress使用不當形成的,下面明月就說說有哪些使用不當是影響訪問速度的。

外鏈引用

你博客網站內引用外鏈過多,有時候是訪問慢的主要罪魁禍首(外鏈就是http前綴域名非博客主域名的連接),至於說爲啥有這些外鏈?緣由有不少,好比:文章內的外鏈圖片、插件內的外鏈http請求、主題代碼裏的外鏈請求等等。特別是文章內的外鏈圖片,由於並不僅僅只在載入文章的時候影響文章的載入,首頁、分類頁的縮略圖裁剪也要調用外鏈圖片來裁剪,只要是顯示縮略圖的地方外鏈圖片都會被調用屢次。插件和主題內的外鏈通常影響比較大的是 WordPress 後臺載入速度,對前端影響主要就看插件或者主題做者的開發水平和思路了。

插件影響

其實插件對訪問速度的影響有時候並不僅僅是表如今前端,而是服務器端或者說是數據庫服務器端,有些插件會產生大量的數據庫查詢讀取次數好比著名的 WordPress 「安全衛士」插件 Wordfence Security 就會對數據庫進行大量的操做,其它的還有不少相似的插件都有這樣的問題,好比:SEO類插件等等。因此在決定使用一個插件的時候,最好是啓用插件後看看數據庫裏是否是多出了非 WordPress 系統WP開頭的「表」,若是有就儘可能不要使用,或者使用完後就停用插件,須要使用的時候再開啓。
相似圖片的靜態文件過多的影響

圖片如今幾乎是博客文章裏不可缺乏的了,圖文並茂的文章能夠受到用戶和搜索引擎的青睞是你們都知道的,那麼圖片多了後依然會影響訪問速度,由於這等於說變相的加劇了主機服務器硬盤的讀寫操做,每個訪問都會有讀寫操做的請求誕生,加上相應的CSS/JS這類起到美化炫酷的代碼對服務器其實也是個不小的壓力。

數據庫服務器瓶頸影響

你們不要忽略了數據庫性能瓶頸帶來的影響,特別是博客文章數量或者是插件數量多了之後,數據庫要承受很大的壓力的,插件對wp_options表、博客文章對wp_post表的查詢量是驚人的,主機宕機就兩個因素,一個是主機負載太高,一個是數據庫服務器鎖死。

4、優化 WordPress 的明確方向

經過上述三點的分析,那麼我就能夠明確了 WordPress 優化的方向,主要就集中在「動靜態分離」、「服務器端優化」、「 WordPress 緩存優化」、「 WordPress 程序優化」這四個方面來操做了,下面明月引用「我愛水煮魚」大神的 WordPress 性能優化經驗和技巧來講明爲何這四個方面(明月會在每一條下面作一些我的建議):

動靜態分離

無論 WordPress 博客仍是其餘 CMS 建的站點,優化的第一步必定是動靜態分離,這也是你看到新浪,騰訊等門戶,他們圖片的域名和網站的域名不是同一個的緣由。

網站的靜態文件通常有兩種:第一種是網站的 CSS , JS 和一些主題的經常使用背景圖片和按鈕文件,這些圖片若是網站不進行改版或者其餘改動,基本上是不會修改的,第二種是天天更新的網站內容中上傳的圖片或者附件,這些圖片文件也是基本不會改動的。

解決好靜態文件存儲和加速,網站性能就首先能獲得基本的保證了, WordPress 構建的網站和博客也是同樣的。對於這些靜態文件來講,最好的解決方案永遠是使用 CDN 網絡進行加速,這樣服務器的壓力將大大下降,由於訪問頁面只有當前頁面是在本身的服務器上,其餘全部圖片, JS 和 CSS 都是從 CDN 獲取的。
注:這裏明月要強調的是「動靜分離」目前解決最好的就是七牛雲了,因此這裏明月強烈推薦七牛雲,每個月免費 10G 的流量和空間,絕對夠咱們大部分草根博客無償使用好久了。

另附上本博有關七牛雲的幾篇文章供你們參考學習:

使用七牛前必需要知道和理解的

分享幾個有關七牛雲和評論郵件的實用代碼

利用七牛雲存儲緩存Gravatar頭像加速 WordPress

CDN 試用總結和個人選擇!

服務器優化

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

選擇一個靠譜的主機託管商,我的推薦 BGP 或者多線機房,讓全國用戶訪問都能有不錯的速度,而後儘可能選擇獨立的服務器,再不濟,也得VPS,?由於你沒有服務器的 Root 權限不少東西是沒法進行的。

服務器問題解決以後,服務器能夠作以下優化:

  • MySQL 設置 MySQL Query Cache ,能夠保存保存查詢結果,一樣的查詢再也不從數據庫檢索,對速度有很大的提高。

  • PHP 開啓 OPCache :把通過編譯後的 PHP 代碼緩存到共享內存中,並在用戶訪問的時候直接調用從而起到高效的加速做用。

  • 安裝 Memcached 和 PHPMemcached 擴展:使用 Memcached 來緩存 WordPress 數據。

注:關於「服務器優化」這須要必定的 Linux 基礎才能本身操刀的,沒有相關技術的能夠請求主機管理員幫忙,通常狀況下主機服務器都默認已經開啓上述的優化了,咱們最多能夠向管理員求證和落實一下,這也是判斷你的主機提供商專業不專業的時候。

WordPress 緩存

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

因此最基礎的 WordPress 緩存插件就是,把 WordPress 產生的 Key-Value 存起來,若是是使用 Memcached ,就是存到內存,若是使用 Flie 就是存到硬盤中,固然高級的 WordPress 插件還能作更多,好比 WP-Rocket 把整個頁面緩存到硬盤中,下次直接訪問靜態的 HTML 文件,讓服務器直接繞過 PHP ,節約 CPU 時間。 Batcache 會把整個頁面當作一個對象存到內存裏面。我我的推薦使用 Memcached 和 Batcache 進行緩存。

對於已登錄的用戶,Memcached 會把 WordPress 的對象存到內存裏面,服務器的內存足夠大,讀取和存儲速度也夠快,而且內存緩存命中率也大於 97% 。另外咱們 WordPress 程序通過優化以後,每一個頁面的查詢通常在2條左右,因此整個網站效率很高,首頁甚至作到 0SQL ,頁面生成只須要 0.0013 秒。

對於未登陸的用戶,Batcache 會把整個頁面當作一個對象存到內存裏面,未登陸用戶訪問的時候,整個頁面從內存中取出,速度奇快。
注:同上一條同樣,這裏的 WordPress 緩存主要是針對服務器層面配置來優化的,通常主機商那邊默認都已經配置好了,具體詳情只能是問你的主機商來覈實了。只有 WordPress 的緩存插件是須要咱們來安裝配置的,這裏明月推薦WP Super Cache 、W3 Total Cache 、 WP-Rocket 這三個 WordPress 緩存插件,明月目前使用的是 WP-Rocket ,具體你們能夠參考【推薦一個 WordPress 本地緩存的神器: WP-Rocket 插件】來了解。

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 插件和主題若是必定要直接查詢數據庫,請作好 ObjectCache,將查詢的結果使用w p_cache_set 存到 ObjectCache 中,下次直接使用 wp_cache_get 獲取。
注:本條能夠理解爲是一個專業級的技術探討了,固然也請必定要記住養成使用插件和主題的好習慣哦!懂技術的應該能夠理解,小白能夠忽略直接給明月點贊回評支持了!謝謝您的閱讀支持!

好了,沒有想到僅僅是個總結性的文章我居然囉嗦了這麼多,6000多字!我本身都驚呆了,看來仍是有點兒囉嗦了,之後得精簡文字「囉嗦」的毛病呀!但願此文能夠幫助到你們,特別是小白站長們,看完此文後有收穫就是明月最大的欣慰了!

相關文章
相關標籤/搜索