做網(wǎng)站W(wǎng)ordPress性能優(yōu)化
WordPress 很慢
很多博主都會(huì )感覺(jué) WordPress 很慢?作為全世界最常用的建站和博客系統 WordPress 來(lái)說(shuō),在性能設計上肯定不會(huì )有太大的問(wèn)題,WordPress 開(kāi)發(fā)團隊也肯定也考慮到這個(gè)問(wèn)題。
那么 WordPress 效率問(wèn)題主要是出在哪里呢?根據我多年 WordPress 建站和維護的經(jīng)驗,很多性能的問(wèn)題都是 WordPress 使用不當造成的,比如安裝太多效率低下的插件,使用代碼質(zhì)量低下的主題,沒(méi)有正確處理 WordPress 的緩存等等,所以提高 WordPress 性能,就要從這些方面入手。
今天就給大家講講自己多年總結的 WordPress 優(yōu)化經(jīng)驗和技巧:
動(dòng)靜態(tài)分離
不管 WordPress 博客還是其他 CMS 建的站點(diǎn),優(yōu)化的第一步一定是動(dòng)靜態(tài)分離,這也是你看到新浪,騰訊等門(mén)戶(hù),他們圖片的域名和網(wǎng)站的域名不是同一個(gè)的原因。
網(wǎng)站的靜態(tài)文件一般有兩種:第一種是網(wǎng)站的 CSS,JS 和一些主題的常用背景圖片和按鈕文件,這些圖片如果網(wǎng)站不進(jìn)行改版或者其他改動(dòng),基本上是不會(huì )修改的,第二種是每天更新的網(wǎng)站內容中上傳的圖片或者附件,這些圖片文件也是基本不會(huì )改動(dòng)的。
解決好靜態(tài)文件存儲和加速,網(wǎng)站性能就首先能得到基本的保證了,WordPress 構建的網(wǎng)站和博客也是一樣的。對于這些靜態(tài)文件來(lái)說(shuō),最好的解決方案永遠是使用 CDN 網(wǎng)絡(luò )進(jìn)行加速,這樣服務(wù)器的壓力將大大降低,因為訪(fǎng)問(wèn)頁(yè)面只有當前頁(yè)面是在自己的服務(wù)器上,其他所有圖片, JS 和 CSS 都是從 CDN獲取的。
從使用便捷性和性?xún)r(jià)比角度來(lái)說(shuō),個(gè)人推薦 WordPress 博客最方便使用的七牛云存儲,我也寫(xiě)了一個(gè)七牛鏡像存儲的 WordPress 插件,讓你可以一鍵實(shí)現 WordPress 博客靜態(tài)文件 CDN 加速。
服務(wù)器優(yōu)化
優(yōu)化好靜態(tài)文件之后,就要開(kāi)始對網(wǎng)站的動(dòng)態(tài)內容進(jìn)行優(yōu)化,優(yōu)化動(dòng)態(tài)內容,首先要有一個(gè)穩定網(wǎng)絡(luò )環(huán)境,穩定的主機供應商和服務(wù)器性能的優(yōu)化。
選擇一個(gè)靠譜的主機托管商,個(gè)人推薦 BGP 或者多線(xiàn)機房,讓全國用戶(hù)訪(fǎng)問(wèn)都能有不錯的速度,然后盡量選擇獨立的服務(wù)器,再不濟,也得 VPS, 因為你沒(méi)有服務(wù)器的 Root 權限很多東西是無(wú)法進(jìn)行的。。
服務(wù)器問(wèn)題解決之后,服務(wù)器可以做如下優(yōu)化:
MySQL 設置 MySQL Query Cache,可以保存保存查詢(xún)結果,同樣的查詢(xún)不再從數據庫檢索,對速度有很大的提升。
PHP 開(kāi)啟 OPCache:把經(jīng)過(guò)編譯后的 PHP 代碼緩存到共享內存中,并在用戶(hù)訪(fǎng)問(wèn)的時(shí)候直接調用從而起到高效的加速作用。
安裝 Memcached 和 PHP Memcached 擴展:使用 Memcached 來(lái)緩存 WordPress 數據。
WordPress 緩存
要徹底明白和搞懂 WordPress 性能優(yōu)化,首先要理解 WordPress 緩存機制,WordPress 默認是一種叫做 WordPress Object Cache 的對象緩存機制,它是把需要緩存的內容按照 Key-Value 這樣的模式進(jìn)行緩存(和 No-SQL 的 key-value 的有點(diǎn)類(lèi)似),當然它還支持按照 Group 來(lái)劃分和避免緩存的內容沖突。
所以最基礎的 WordPress 緩存插件就是,把 WordPress 產(chǎn)生的 Key-Value 存起來(lái),如果是使用 Memcached,就是存到內存,如果使用 Flie 就是存到硬盤(pán)中,當然高級的 WordPress 插件還能做更多,比如 WP Super Cache把整個(gè)頁(yè)面緩存到硬盤(pán)中,下次直接訪(fǎng)問(wèn)靜態(tài)的 HTML 文件,讓服務(wù)器直接繞過(guò) PHP,節約 CPU 時(shí)間。 Batcache 會(huì )把整個(gè)頁(yè)面當做一個(gè)對象存到內存里面。我個(gè)人推薦使用 Memcached 和 Batcache 進(jìn)行緩存。
對于已登陸的用戶(hù),Memcached 會(huì )把 WordPress 的對象存到內存里面,服務(wù)器的內存足夠大,讀取和存儲速度也夠快,并且內存緩存命中率也大于 97%。另外我們 WordPress 程序經(jīng)過(guò)優(yōu)化之后,每個(gè)頁(yè)面的查詢(xún)一般在 2 條左右,所以整個(gè)網(wǎng)站效率很高,首頁(yè)甚至做到 0 SQL,頁(yè)面生成只需要 0.0013秒 。
對于未登錄的用戶(hù),Batcache 會(huì )把整個(gè)頁(yè)面當做一個(gè)對象存到內存里面,未登錄用戶(hù)訪(fǎng)問(wèn)的時(shí)候,整個(gè)頁(yè)面從內存中取出,速度奇快。
WordPress 程序優(yōu)化
WordPress 程序優(yōu)化是基于 WordPress Object Cache 的機制對 WordPress 插件和主題進(jìn)行優(yōu)化,主要經(jīng)驗有以下幾點(diǎn):
只使用必須的 WordPress 插件,安裝太多的 WordPress 插件很容易引起性能問(wèn)題。
從正規站點(diǎn)下載 WordPress 主題,這樣下載的主題才能保證質(zhì)量和安全。
WordPress 主題和插件盡量使用模板函數,因為 WordPress 模板函數如果可能都已經(jīng)做好了 WordPress Object Cache。
比如 get_the_terms 和 wp_get_object_terms 這兩個(gè)函數,功能基本一樣,但是 get_the_terms 直接從對象緩存中取數據,無(wú)查詢(xún),而 wp_get_object_terms 每次都從數據庫中取數據。
WordPress 插件和主題如果一定要直接查詢(xún)數據庫,請做好 Object Cache,將查詢(xún)的結果使用 wp_cache_set 存到 Object Cache 中,下次直接使用 wp_cache_get 獲取。
WordPress 性能優(yōu)化服務(wù)
選擇好的服務(wù)器和托管商,對 WordPress 程序進(jìn)行優(yōu)化,并且做好緩存,WordPress 效率其實(shí)很高的,加上 WordPress 本身的靈活性和功能強大,WordPress 作為各種建站絕對是非常不錯的選擇,所以我一直使用 WordPress 建站。