作為一個全面的 WordPress 性能優(yōu)化教程棺克,本文旨在幫助讀者排查 WordPress 網(wǎng)站的性能問題咖城,同時也提供網(wǎng)站前端優(yōu)化加速的建議。
如果你曾經(jīng)遇到過 WordPress 管理界面加載緩慢殿怜、「MySQL 服務(wù)器崩潰」廉涕、網(wǎng)頁一直無法加載等情況命迈,或者你預(yù)計網(wǎng)站的流量將要大漲,相信本教程會對你有益火的。
1. 查看網(wǎng)站前端性能指標(biāo)
通常情況下壶愤,網(wǎng)站加載緩慢是由于網(wǎng)頁規(guī)模過大引起的,而且現(xiàn)在的大多數(shù)網(wǎng)頁馏鹤,都包含許多圖片征椒、Flash、視頻以及 JS 文件湃累,這些元素都會給網(wǎng)絡(luò)加載帶寬造成壓力勃救,進而導(dǎo)頁面打開緩慢、用戶體驗差的問題治力。
如果你準(zhǔn)備認(rèn)真地解決這個問題蒙秒,你需要安裝部署 Firefox 瀏覽器,Firebug 擴展程序 宵统、Yslow 插件以及 Browser Insight晕讲。
開發(fā)時最好盡量將頁面大小保持在 100KB 最好是 50KB 以內(nèi),如果你的網(wǎng)頁包含許多多媒體內(nèi)容马澈,那你最好學(xué)會使用 Yslow瓢省。Yslow 會對網(wǎng)站性能進行打分(分值為0到100),從js腳本痊班、css勤婚、多媒體資源等多個方面,80分應(yīng)該是網(wǎng)站的最低目標(biāo)涤伐。
不過 Yslow 本身也有些局限性:
1.最新版的火狐還有谷歌瀏覽器已經(jīng)無法使用了
2.其次 Yslow 主要是頁面結(jié)構(gòu)分析馒胆,但是現(xiàn)在界面主要靠 js 繪制例如 react 等
3.而且 Yslow 本身主要關(guān)注的是 PC 端缨称,可是現(xiàn)在是 mobile 時代
給大家推薦一個與 Yslow 有關(guān)的文章:YSlow老矣尚能飯否,有興趣的可以去看看,個人覺得幫助比較大祝迂。
Firebug 一直同 Firefox 連接在一起睦尽,形成了強大的網(wǎng)頁開發(fā)工具,通過 Firebug 你可以編輯液兽、調(diào)試和監(jiān)控任何頁面的 CSS、HTML 和 JavaScript掌动,不過就像 Yslow 主要是負(fù)責(zé) PC 端一樣四啰,F(xiàn)irebug 主要針對的是手機端的調(diào)試。
Browser Insight 這款工具比較好的地方在于粗恢,它支持多平臺頁面監(jiān)控分析柑晒,無論是PC端、移動微信眷射、移動瀏覽器匙赞、還是安卓 webview 都可以兼容。其次妖碉,它的功能比較整體化涌庭,涉及:頁面響應(yīng)時間、腳本錯誤欧宜、資源加載時間耗時坐榆、ajax、DNS/TCP耗時冗茸、用戶響應(yīng)時間分布等多個維度席镀,相比于上面兩款工具,Browser Insight 算是一個比較全面的前端性能監(jiān)控分析工具了夏漱。
給大家附上三篇之前讀過的相關(guān)文章豪诲,有需求的話可以去看看:
Firebug,Debugger javascript調(diào)試?yán)?附下載地址
2. 關(guān)閉 Post Revisions
從 WordPress 2.6 開始挂绰,Post 版本開始引用追蹤機制屎篱,例如,每次保存一篇 Post 時葵蒂,數(shù)據(jù)庫會寫入一次修正芳室。如果你不需要此功能,可以在 wp-config.php 文件中添加一行代碼禁用之刹勃,wp-config.php 文件可以在 WordPress 主站的安裝目錄找到:
define('WP_POST_REVISIONS', false);
如果你啟用了該功能堪侯,一段時間之后,數(shù)據(jù)庫中會寫入許多修正 post荔仁,這個也會導(dǎo)致數(shù)據(jù)加載緩慢等問題伍宦,如果你想刪除它們芽死,只要在插件中運行下面的查詢語句(比如:利用前文提到過的 WP-DBManager)即可。
DELETE FROM wp_posts WHERE post_type = "revision";
該語句會刪除數(shù)據(jù)庫中的所有 「revision」 posts次洼,使數(shù)據(jù)庫查詢更加快捷关贵。
注意:使用時請一定仔細(xì),如果你不知道自己在做什么卖毁,請確保先備份數(shù)據(jù)庫揖曾。或?qū)で髮I(yè)幫助亥啦。
3. 檢查插件
插件往往是導(dǎo)致加載緩慢的重點嫌疑犯炭剪, WordPress 提供了豐富的插件,很可能就是因為一個資源分配不佳的插件導(dǎo)致了頁面的加載問題翔脱。
例如奴拦,過去曾導(dǎo)致過加載緩慢的插件有:Popularity contest,aLinks 及 @Feed届吁。
檢查插件時错妖,可以先禁用所有插件,檢查網(wǎng)站重點部分的運行狀況疚沐。如果沒有問題暂氯,依次啟用各個插件,直到發(fā)現(xiàn)導(dǎo)致問題的插件亮蛔,不過這個方法很老實株旷,但是相當(dāng)耗費時間,而且每次出現(xiàn)問題都要這樣排查一次尔邓。
上文提及的Browser Insight 把一個頁面的加載分為了白屏?xí)r間晾剖、首屏?xí)r間、頁面加載完成時間梯嗽、資源加載完成時間齿尽,其中配合資源加載時間以及其剛剛上線的DNS耗時分析就可以較為清楚地定位插件的問題
4. 實施緩存
緩存可以從事先準(zhǔn)備好的存儲區(qū)(緩存)檢索數(shù)據(jù),而無需在用到同一信息時重新生成之灯节。因此循头,緩存能極大提升信息檢索的速度,在多數(shù)現(xiàn)代應(yīng)用中都廣泛使用炎疆。
使用緩存的最簡便方法卡骂,是使用緩存插件,當(dāng)然了形入,如果你的博客存儲在共享的主機上全跨,這也是唯一的辦法
最常用的緩存插件是 WP Super Cache,后起之秀 W3 Total Cache 也是一種強大的緩存插件亿遂,而且它每天都在更新浓若,大家可以試試看渺杉。
5. MySQL 優(yōu)化
MySQL 可以將查詢結(jié)果保存在自己的緩存中。啟用這一功能挪钓,需編輯 MySQL 配置文件(通常是在 /etc/my.cnf 路徑下)是越,在其中添加如下代碼:
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M
重啟 MySQL 服務(wù)器后,就會創(chuàng)建大小為 16MB 的查詢緩存(緩存大小取決于可用的 RAM 大小碌上,在內(nèi)存 4GB 的機器中倚评,可使用的緩存達(dá)250MB)。
檢查 MySQL 運行是否正常馏予,可運行以下查詢:
SHOW STATUS LIKE 'Qcache%';
結(jié)果示例:
Qcache_free_blocks 718
Qcache_free_memory 13004008
Qcache_hits 780759
Qcache_inserts 56292
Qcache_lowmem_prunes 0
Qcache_not_cached 3711
Qcache_queries_in_cache 1715
Qcache_total_blocks 4344
如果你想進一步優(yōu)化 MySQL 天梧,你可以使用的選項非常豐富。以下是我的 MySQL 配置文件吗蚌,針對的是 4GB 內(nèi)存的四核專用機腿倚。如果你使用開箱即用的機器纯出,多半無法適用這樣的配置蚯妇,請僅作參考。
[mysqld]
bulk_insert_buffer_size = 8M
connect_timeout=10
interactive_timeout=50
join_buffer=1M
key_buffer=250M
max_allowed_packet=16M
max_connect_errors=10
max_connections=100
max_heap_table_size = 32M
myisam_sort_buffer_size=96M
query_cache_limit = 4M
query_cache_size = 250M
query_cache_type = 1
query_prealloc_size = 65K
query_alloc_block_size = 128K
read_buffer_size=1M
read_rnd_buffer_size=768K
record_buffer=1M
safe-show-database
skip-innodb
skip-locking
skip-networking
sort_buffer=1M
table_cache=4096
thread_cache_size=1024
thread_concurrency=8
tmp_table_size = 32M
wait_timeout=500
# for slow queries, comment when not used
#log-slow-queries=/var/log/mysql-slow.log
#long_query_time=1
#log-queries-not-using-indexes
[mysqld_safe]
nice = -5
open_files_limit = 8192
[mysqldump]
quick
max_allowed_packet = 16M
[myisamchk]
key_buffer = 64M
sort_buffer = 64M
read_buffer = 16M
write_buffer = 16M
超級實用的 mysqlrepot 工具是 MySQL 調(diào)試的利器暂筝。Mysql tuner 是快速修復(fù)數(shù)據(jù)庫的最佳選擇箩言。MySQL Tuning primer 與 MySQL Activity Report 也是值得一試的好工具。
Maatkit 則是有效管理 MySQL 的必備神器焕襟。
MySQL 慢查詢?nèi)罩臼谦@取有問題的查詢信息的有利工具陨收,激活該日志你需要編輯 my.cof 文件:
log-slow-queries=/var/log/mysql-slow.log
long_query_time=1
log-queries-not-using-indexes
這會創(chuàng)建一個查詢?nèi)罩荆锩姘徛樵兣c缺少索引的查詢鸵赖。你需要找出運行緩慢的查詢务漩,才能對其使用內(nèi)部提供的慢日志過濾與解析工具。使用'EXPLAIN'能有效幫助你理解并優(yōu)化復(fù)雜的查詢語句它褪。
6. 最小化 HTTP 請求數(shù)量
使用更少的圖片(或?qū)⑺袌D片用一張大圖替代饵骨,再用 CSS 調(diào)整位置),更少的 JS茫打,更少的 CSS 文件(通常意味著更少的插件)居触,就能減少 HTTP 請求數(shù)量。
PHP speedy 插件能將所有的 JS 與 CSS 文件合為一個大文件老赤,從而切實減少 HTTP 請求的數(shù)量轮洋。PHP Speedy 的唯一缺點是無法與其他插件 100% 兼容。
同樣抬旺,你可以使用 CSS Sprite generator 將所有圖片整合為一張大圖弊予,再用 CSS background-position 進行展示。這也能極大地減少 HTTP 請求數(shù)量开财。
7. 使用 Apache .htaccess 壓縮內(nèi)容
如果你有專屬的服務(wù)器块促,可以將所有內(nèi)容壓縮后再傳給瀏覽器荣堰。由于大多數(shù) html 頁面都容易壓縮,這一招能大大降低加載時間竭翠。
在 .htaccess 中添加以下代碼:
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-javascript application/x-httpd-php application/rss+xml application/atom_xml text/javascript
8. 插件 expires 頭信息
Expire (截止時間)頭信息會告知瀏覽器內(nèi)容緩存的保存時間振坚。網(wǎng)站的大多數(shù)圖片幾乎不會改變,因此可以將它們保存在本地斋扰。
在 .htaccess 中添加以下代碼(如果出現(xiàn)問題渡八,請確保 mod_expires 已經(jīng)在 Apache 中載入):
ExpiresActive on
ExpiresDefault "access plus 30 days"
Header unset ETag
FileETag None
以下是另一種設(shè)置方法:
Header unset Pragma
FileETag None
Header unset ETag
# 1 YEAR
Header set Cache-Control "public"
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
Header unset Last-Modified
# 2 HOURS
Header set Cache-Control "max-age=7200, must-revalidate"
# CACHED FOREVER
# MOD_REWRITE TO RENAME EVERY CHANGE
Header set Cache-Control "public"
Header set Expires "Thu, 15 Apr 2010 20:00:00 GMT"
Header unset Last-Modified
使用 cacheability engine 檢查緩存配置。
9. 緩存 Gravatars
許多博客都使用 Gravatars(頭像)传货,也即靠在評論邊上的小圖片屎鳍。然而,gravatars 對于網(wǎng)站優(yōu)化有兩大缺點:
- 每張 gravatars 圖片都需要一次新的 HTTP 請求獲取问裕,即便同一張圖片已經(jīng)加載過了逮壁。(包含100個評論的網(wǎng)頁就需要 100 次額外的 HTTP 請求)
- Gravatar 圖片不包含 expire 頭信息。
我們可以創(chuàng)建一個本地 gravatar 緩存粮宛,將所有網(wǎng)站需要的圖片都存儲在這兒窥淆。如果能將 gravatar 緩存保存在一個獨立的自域中,就更好了巍杈。
我使用了 Zenpax.com 提供的插件忧饭,將所有 gravatars 頭像本地化緩存。
總結(jié)
本文主要從網(wǎng)站性能指標(biāo)筷畦、優(yōu)化緩存词裤、MySQL 等方面給大家介紹了如何進行 WordPress 網(wǎng)站的性能優(yōu)化,明天有時間的話再給大家介紹下從主題優(yōu)化鳖宾、圖片壓縮等角度如何來優(yōu)化 WordPress 網(wǎng)站吼砂。
本文的原文作者為VLADIMIR PRELOVAC,由OneAPM產(chǎn)品運營編譯整理鼎文。
原文鏈接:http://www.prelovac.com/vladimir/wordpress-optimization-guide/
Browser Insight 是一個基于真實用戶的 Web 前端性能監(jiān)控平臺渔肩,能夠幫大家定位網(wǎng)站性能瓶頸,網(wǎng)站加速效果可視化漂问;支持瀏覽器赖瞒、微信、App瀏覽 HTML 和 HTML5頁面蚤假。想閱讀更多技術(shù)文章栏饮,請訪問 OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客