WordPress 全方位優(yōu)化指南(上)

作為一個全面的 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)文章豪诲,有需求的話可以去看看:

高流量網(wǎng)站如何做出高性能?

Firebug,Debugger javascript調(diào)試?yán)?附下載地址

兩款較好的Web前端性能測試工具

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 contestaLinks@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 primerMySQL 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)化有兩大缺點:

  1. 每張 gravatars 圖片都需要一次新的 HTTP 請求獲取问裕,即便同一張圖片已經(jīng)加載過了逮壁。(包含100個評論的網(wǎng)頁就需要 100 次額外的 HTTP 請求)
  2. 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 官方博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末磷仰,一起剝皮案震驚了整個濱河市袍嬉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖伺通,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箍土,死亡現(xiàn)場離奇詭異,居然都是意外死亡罐监,警方通過查閱死者的電腦和手機吴藻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弓柱,“玉大人沟堡,你說我怎么就攤上這事∈缚眨” “怎么了航罗?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長屁药。 經(jīng)常有香客問我粥血,道長,這世上最難降的妖魔是什么酿箭? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任复亏,我火速辦了婚禮,結(jié)果婚禮上七问,老公的妹妹穿的比我還像新娘蜓耻。我一直安慰自己茫舶,他們只是感情好械巡,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饶氏,像睡著了一般讥耗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疹启,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天古程,我揣著相機與錄音,去河邊找鬼喊崖。 笑死挣磨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荤懂。 我是一名探鬼主播茁裙,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼节仿!你這毒婦竟也來了晤锥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎矾瘾,沒想到半個月后女轿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡壕翩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年蛉迹,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片放妈。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡婿禽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出大猛,到底是詐尸還是另有隱情扭倾,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布挽绩,位于F島的核電站膛壹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏唉堪。R本人自食惡果不足惜模聋,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唠亚。 院中可真熱鬧链方,春花似錦、人聲如沸灶搜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽割卖。三九已至前酿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹏溯,已是汗流浹背罢维。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丙挽,地道東北人肺孵。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像颜阐,于是被迫代替她去往敵國和親平窘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容