一、網站速度測試

測試網站的速度不能僅看自己電腦打開網站的速度,因為網站的訪客通常來自五湖四海,所以我們需要通過第三方專業的工具來進行測試。

網上有不少在線測試網站速度的網站,利用這些網站就能測試不同地區打開網站的速度。測試的時候不妨多測試幾次,以獲得更準確的測試結果,特別是在您網站使用了 CDN 的情況下。

國內測速

國內的測速網站可以測試不同城市伺服器連接網站的速度,但是不會告訴您加載資源的具體數據,以及優化建議。

測吧

17CE

國外測速

國外的知名測速網站有 Google PageSpeed Insights、GTmetrix、Pingdom 等,可提供詳細的測速報告,以及優化建議。如果您的網站加載速度較慢,可通過這些測速網站來查找原因。

Google PageSpeed Insights

GTmetrix

Pingdom

我的網站在 Pingdom 上的評分只有 C,但是 Load time 卻很低,表明加載速度還是很快的。主要原因有兩項,Pingdom 認為我的網站沒有使用 Gzip 壓縮,但是實際上我通過 Cloudflare 使用了更先進的 Brotli 壓縮;此外由於 Cloudflare 免費版並不支持 cookie-free,所以也減分不少。

所以,有時候我們並不需要太極致的優化,對於測速網站的建議,我們只需要根據自己實際情況調整即可。只要總體加載速度夠快,對於細枝末節的優化,簡單的就做一下,影響不大卻又難以實現的,就沒必要斤斤計較。

二、購買一台快速且穩定的伺服器

伺服器的重要性就不同多說了,一台好的伺服器是一切優化的基礎。

在選擇伺服器的時候,建議大家首選大廠商,不要一味的追求性價比,速度和穩定才是第一要務。小廠商確實有時候會有性價比不錯的主機,有些速度也很不錯,但是往往穩定性就很不如意。

我曾經用過不少主機,從小廠商到中型廠商都試過。小廠商就不說了,宕機頻繁,在網站還沒有盈利時我就決定棄用了。後來用了一個中型廠商的主機很不錯,性價比極高,但是一年也會來幾次宕機或者停機更新。每一次宕機對網站的傷害都是極大的,直接的經濟損失就不說了,萬一被搜尋引擎降權那就是毀滅性的。

選擇伺服器之前,大家要先想好備案的問題。如果訪客主要在國外,那就選擇國外的伺服器,可以免備案快速開通。如果訪客主要在國內,那麼能備案儘量備案,因為網站發展到一定程度,有些事情需要備案才能辦,例如使用國內的 CDN。

1,阿里雲(備案)

網址:https://www.aliyun.com優惠券

阿里雲是國內雲計算的先驅,在國內市場,占領了半壁江山。在國際雲計算市場,阿里雲也占據第三位,僅次於亞馬遜 AWS 和微軟 Azure,第四和第五位分別是 IBM 和谷歌雲。(參考知乎:阿里雲真的國內雲計算第一嗎?這是阿里領先百度和騰訊的地方嗎?

我已使用阿里雲 ECS 伺服器超過一年,目前在線率 100%,從未出現過任何問題。無論是連接速度還是穩定性都無可挑剔。所以在續費的時候我直接續了 3 年(續費年限越長,優惠越多,一年¥1477.88,三年¥2608.02)。

日常資源使用情況:

由於開始建站的時候比較急切,所以我使用的是香港節點的主機,免除了備案的麻煩。但是這導致不能全站使用國內的 CDN,我只好另外備案了一個域名做動靜分離。因此我需要額外做了許多優化工作,才能讓網站在國內達到理想的訪問速度。如果能夠全站 CDN 加速,我的網站速度還能提升一個台階。

我目前使用的伺服器方案是「共享計算型 n4(ecs.n4.small)」,1 核心 CPU,2 G 內存,SSD 20G 雲盤。每天應付數千流量毫無壓力(有使用 CDN + OSS 做動靜分離)。

如果您是建站新手,還可以選擇「輕量應用伺服器」。這種伺服器的好處是即買即用,您不用再手動安裝 WordPress 的各種伺服器環境,只要購買時選擇 WordPress 鏡像即可。

輕量應用伺服器的最低配置是 1 核 1 G、20 G SSD 雲盤、1 兆帶寬,價格 ¥60 元/月,¥612 元/年。

阿里雲經常有各種各樣的活動,購買之前記得先查看一下最新優惠活動頁面,新用戶經常都有很低的折扣,甚至低至 1 折。

2,SiteGround(免備案)

網址:https://www.siteground.com

SiteGround 是美國最受好評的知名伺服器商,在 Facebook 上眾多討論小組的主機民意調查中屢獲第一。

同時也是 WordPress.org 官方推薦的主機

SiteGround 提供很多簡化 WordPress 網站管理的工具:一鍵安裝,託管更新,WP-Cli,WordPress staging(預備測試環境) 和 git 集成。使 WordPress 的加載速度更快:基於 NGINX 的緩存,SSD 硬碟,PHP 7,CDN,HTTP / 2。 而且還可以主動保護 WordPress 網站免受黑客攻擊。

目前 SiteGround 提供三種 WordPress 主機方案,首次購買會有很大的折扣,續費時按正常價格要貴許多,所以建議直接購買 3 年。

最低價格 StartUp 方案僅需一個月 $3.95 美元。提供:WordPress 一鍵安裝、免費 SSL 和 HTTP / 2、免費每天備份、WordPress 自動更新、免費 CloudFlare CDN、免費電郵等等服務。

關於 SiteGround 的詳細介紹請參考此文章:
SiteGround-排名第一的國外 WordPress 專用主機

三、升級到 PHP 7+

有很多人會遺忘掉自己伺服器使用的是哪個版本的 PHP,特別是那些經營多年的網站,可能依然在使用 PHP 5。但是實際上您僅需簡單的升級一下 PHP 版本,您的網站速度可能就可以提升 2-3 倍。

WordPress 5.3 PHP benchmarks

大多數情況下,主機商不會主動幫您更新 PHP 版本,因為您的主題或者插件可能不兼容,所以您需要自己來執行更新。這也導致很多人忘記了這一茬。如果您已經使用一台主機多年,那麼是時候檢查一下您的 PHP 版本了。

第 1 步:進入 WordPress 網站後台,在「工具」→「站點健康」中就能查看 PHP 版本。如果沒有提示,代表 PHP 版本已經是最新的了。

第 2 步:安裝 PHP Compatibility Checker 插件,檢查新的 PHP 版本是否與主題/插件衝突。

第 3 步:進入伺服器控制面板(如:Plesk、Cpanel、寶塔面板),通常都有提供不同 PHP 版本選擇或者安裝,升級至最新版本即可。如果你的主機商沒有提供面板,可以聯繫客服升級。

Plesk ▼

四、安裝緩存插件

緩存插件是提升 WordPress 網站速度的一把利器,效果立竿見影。緩存插件除了加速外,還能減輕伺服器負擔,節省資源,實在是居家旅行、殺人滅口,必備良藥!

緩存插件的作用是,把 WordPress 的網站頁面生成靜態的 html 文件,當用戶訪問時,就不用再解析 PHP 腳本,並減少資料庫的查詢,從而提升網站速度。

WordPress 的緩存插件有很多,知名的有以下這些:

在 Facebook 上的一些民意調查中,WP-Rocket 是排名第一的緩存插件。

但是它是一款收費插件,而且還不便宜,每年 $49 美元,但是經常有低至 5 折續費優惠。

WP-Rocket 不僅僅是一款緩存插件,它還內置很多優化功能,例如:HTML、CSS 和 JS 的壓縮和整合,優化資料庫,DNS 預讀取,CDN 整合、Heartbeat control、Lazyload、WebP 等等。

從我建站開始不久就一直使用 WP-Rocket,對其優化效果和穩定性都極其滿意。它功能豐富,設置簡單,節省了我很多優化工作時間,物有所值,極力推薦。

WP-Rocket 畢竟是收費的,對於大多數人來說還是傾向於使用免費插件。大家可以根據自己的需求來選擇其他插件。

WP Super Cache 是 WordPress 官方出品,知名度很高,兼容性比較好,設置雖不簡單,但也不太複雜。W3 Total Cache 雖然功能豐富,但是設置異常複雜,適合喜歡折騰的人,不建議使用。WP Fastest Cache 是後起之秀,設置簡單,建議使用。

這些免費緩存插件我都使用過,但是與 WP-Rocket 相比還是差強人意,總會有各種莫名的問題或者功能缺失,建議配合 Autoptimize 一起使用。

五、定期清理資料庫

WordPress 經過一段長時間運行後,資料庫里會產生許多垃圾內容,例如:文章修訂版本和草稿、垃圾評論、插件生成的臨時數據、trackback 和 pingback 數據等等。時間久了,資料庫將變得臃腫,降低網站運行速度。所以定期清理資料庫時很有必要的。

您可以使用 WP-Optimize 插件來完成這些工作。注意:在清理和優化資料庫時會直接修改資料庫,所以務必在操作之前先備份資料庫(推薦使用 UpdraftPlus 插件備份),以防萬一。

如果您已經購買 WP-Rocket,就無須安裝此插件,WP-Rocket 已經集成這些功能。

六、心跳控制(Heartbeat Control)

Heartbeat(心跳檢測)是 WordPress 的一項功能,當您登錄 WordPress 管理面板時,它可以在伺服器和瀏覽器之間提供實時通信。它使用文件 /wp-admin/admin-ajax.php 從瀏覽器運行 AJAX 調用。默認情況下,AJAX 請求在文章編輯頁面上每 15 秒發送一次,在儀錶板上每 60 秒發送一次。

但是 Heartbeat 並非是必要的,通常需要使用到它的一些功能是:自動保存、文章修訂、儀錶盤實時提醒、文章鎖定(多人同時編輯)、某些需要在儀錶盤上顯示實時數據的插件。

您可以使用 Heartbeat Control 插件來禁用此功能。

七、Lazyload(懶加載)

相信很多人都知道什麼是 Lazyload,如果您的網站文章存在大量圖片,那麼使用 Lazyload 就能大大提升頁面加載速度。例如微信公眾號、知乎等網站都有使用 Lazyload 功能。

網上一直都有討論 Lazyload 對 SEO 的影響,最主要的問題是導致搜尋引擎無法索引圖片。我的看法是,搜尋引擎本來對圖片的識別能力就有限,文章排名的好壞主要還是看文字內容和其他排名因素,圖片的索引與否對文章的排名影響微乎其微。

所以如果您的網站不是圖片分享型的網站,而且網站使用了大量圖片,我建議還是儘量使用 Lazyload。

Lazyload 還有一個問題,如果您的文章中帶有目錄,因為圖片只有在看到時才加載,導致點擊目錄無法準確定位。如果您像我一樣使用的是目錄插件,那麼只要把「平滑滾動」選項去掉就可以了。

Lazyload 並不是什麼複雜的技術,很多緩存插件或者圖片優化插件都附帶此功能,或者您可以單獨安裝一個 Lazyload 插件 – 使用人數最多的 a3 Lazy Load 插件

八、緩存或禁用谷歌字體

在編輯文章的時候,WordPress 後台會自動加載谷歌字體,由於眾所周知的原因,國內是無法加載谷歌伺服器資源的,因此導致後台加載速度很慢,甚至無法打開。如果您使用的是國外開發的 WordPress 主題,也有可能使用了谷歌字體,導致國內打開速度很慢。

通過 Chrome 的開發者工具可以看到,谷歌這些字體的域名通常是 fonts.gstatic.com,或者 fonts.googleapis.com,並以 woff 或 woff2 結尾。▼

由於 WordPress 在 2019 開始啟用了古騰堡編輯器,網上很多禁用谷歌字體的代碼已無法使用。下面是最新可用的代碼,將以下代碼添加至 WordPress 主題的 functions.php 裡面就行了。

// 禁用 WordPress 後台古騰堡編輯器加載 Google 字體
function Disable_Google_Fonts($translation, $text, $context, $domain)
{
    if($context != 'Google Font Name and Variants' || $text != 'Noto Serif:400,400i,700,700i') {
        return $translation;
    }
    return 'off';
}
add_filter( 'gettext_with_context', 'Disable_Google_Fonts',10, 4);

上面的代碼只能解決後台的問題,對於前台(主題)是無能為力的。網上有很多使用代碼或者插件的解決方案,但是由於不同的主題可能需要使用不同的代碼,逐一測試很麻煩,而網上推薦的很多插件又失效了。

經過一番查詢後,我找到以下一些辦法:

在 WordPress 後台通過關鍵字「Google Fonts」來查找插件,如果有保持更新的插件那就可以嘗試使用。目前我找到的一款插件是:Disable and Remove Google Fonts

此外,您還可以安裝 Autoptimize 插件,此插件有禁用或緩存谷歌字體的功能。Autoptimize 同時也是一款很優秀的 WordPress 優化插件,非常值得推薦使用。

或者還可以使用 OMGF | Host Google Fonts Locally 插件,把 Google 字體託管到本地。

九、使用 CDN 加速

使用 CDN 加速是提升網站速度最立竿見影的方法,建議有條件的都務必使用。

CDN 不僅能大幅提升網站訪問速度,還能隱藏伺服器真實 IP,提高伺服器安全,降低伺服器資源消耗,可謂一舉多得。

1,已備案網站

已備案的網站通常訪問對象在國內,所以理應購買國內的 CDN 服務。推薦使用阿里雲 CDN,價格僅需每天每兆流量 0.54 元(按量付費)。

阿里雲 CDN 可以流量包的形式購買,最低價格一年 ¥20 / 100 G(日流量 1 千左右的網站已經夠用了)。如果是 https 網站,需額外購買 https 請求包,價格一年 ¥40 / 1000 萬次。

購買地址:https://www.aliyun.com/product/cdn(購買前記得先領取代金券大禮包

阿里雲 CDN 擁有國內節點 1000+,覆蓋電信、聯通、移動、鐵通、教育、長寬等各運營商。帶寬儲備 80T 。海外節點 300+,部署在全球 70 多個國家和地區,覆蓋六大洲。

主要特色功能包括:

  • HTTPS 安全加速 – 防劫持、防篡改、防泄密,享受企業級可靠 HTTPS 加速服務。
  • 高性能靈活緩存策略 – 智能對象熱度算法,分層緩存熱點資源,讓您的資源精準加速。
  • 訪問控制 – 提供多重訪盜鏈功能,refer 防盜鏈、UA 頭防盜鏈、IP 防盜鏈、URL 鑒權校驗,完美解決盜鏈危害。
  • 性能優化 – 頁面優化、智能壓縮功能,為您減少傳輸內容節約開銷的同時提升加速效果。

2,未備案網站

未備案網站的訪客主要在國外,雖然阿里雲也提供國外的 CDN 服務,但是在國外就沒必要了。因為國外有一個大名鼎鼎的 CDN 服務商:CloudFlare!最重要的是完全免費!

有人可能要問了,那國內的網站可以用 CloudFlare CDN 嗎?答案是可以,但是結果不是提速而是降速。因為 CloudFlare 在國內沒有節點,節點都在國外。國內的訪客訪問到國外的節點上去了,速度自然更慢了。

關於 CloudFlare 的設置網上有很多教程,這裡就不再贅述了。接入方式推薦使用 cname 方式,網上有很多第三方 cname 接入的網站,例如:笨牛網。此外再安裝 CloudFlare 官方插件,當文章更新時可以及時刷新緩存。

但是有一個地方需要設置正確才能大幅度提升速度,就是設置 Page Rules。因為 CloudFlare 默認情況下只會緩存圖片、css、js 等文件,html 等文章頁面是不會緩存的,通過 Page Rules 建立規則就能調整 CloudFlare 緩存哪些頁面,甚至整站緩存,這樣速度就能大幅提升。

上圖是在 CloudFlare 後台添加的一條 Page Rules。網址替換成您的網站,Browser Cache TTL(瀏覽器緩存時間) 和 Edge Cache TTL(回源周期)按照您的需求設置即可。回源周期就是 CloudFlare 多久緩存一次您網站的內容。

十、圖片優化

圖片是拖慢網站速度的一個很重要的原因,尤其是當網站使用了大量圖片的時候,例如這篇文章中就使用了很多圖片,除了使用 Lazyload,我還通過插件來解決圖片優化的問題。

我嘗試過 WordPress 的很多圖片優化插件,其中做得最優秀的當屬 Smush 和 imagify

圖片優化插件可以自動壓縮和優化您上傳的圖片,而且還能根據您設置的最大尺寸, 自動縮小尺寸過大的圖片。圖片的體積減小了,自然加載速度就更快了。

圖片的最大寬度建議設置為和文章的寬度一樣,除非您想讓訪客能點擊放大。因為訪客能看到的寬度也就那麼大,圖片再大也只是浪費資源。查看方法如下圖(點擊放大):

如果您不想使用插件,網上也有很多網站可以利用,搜索:「在線壓縮圖片」就能找到,例如 yasuotu.com。您可以設定寬度、高度、壓縮比率來優化圖片。

圖片優化的方法還不止這些,例如禁用 WordPress 縮略圖功能以節省伺服器空間。此外還有更優雅的解決方案,就是利用阿里雲 oss 圖片處理服務實時壓縮和縮放圖片。

十一、異步加載 JavaScript

有時候,我們的網站無可避免要加載一些第三方資源,例如前面提到的谷歌字體,或者統計代碼。但是這些外部資源存在於第三方伺服器,加載的速度是不可控的,有時候會減慢網站的整體速度。

通常最常見的外部資源是加載第三方 js 文件,此時我們可以通過異步加載來解決問題。異步加載可以使得外部 js 放在最後加載和執行,這樣訪客就無須等待這些外部 js 加載完畢就能看到頁面,提升用戶體驗。

異步加載 js 很簡單,如果您可以編輯代碼,那麼只需要添加「async」或「defer」屬性即可,例如:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

您還可以安裝 Async JavaScript 插件,這個插件可以讓您控制每個外部 js 是否需要異步加載。或者使用 Asset CleanUp 插件,這個插件不僅可以異步 js,還可以控制在哪些頁面禁用 js 腳本(有些腳本並非所有頁面都必須使用)。

此外,針對 Google Analytics 您可以使用 CAOS 插件把代碼託管到自己的伺服器。

十二、DNS Prefetch

DNS Prefetch 是一種 DNS 預解析技術。當你瀏覽網頁時,瀏覽器會在加載網頁時對網頁中的域名進行解析緩存,這樣在你單擊當前網頁中的連結時就無需進行 DNS 的解析,減少用戶等待時間,提高用戶體驗。

例如淘寶網站上就使用了 DNS Prefetch:

大部分網站都無可避免要使用到第三方網站的資源(例如百度統計),或者跳轉到其他網站的連結。此時通過 DNS Prefetch 就能省去 DNS 解析的時間,提升訪問的速度。

您可以安裝插件 Pre* Party Resource Hints 來實現 DNS Prefetch,或者在 functions.php 中添加代碼,例如:

function wp_dns_prefetch() {
  echo '
  <meta http-equiv="x-dns-prefetch-control" content="on" />
  <link rel="dns-prefetch" href="//bdimg.share.baidu.com/" />
  <link rel="dns-prefetch" href="//api.share.baidu.com/" />
  <link rel="dns-prefetch" href="//hm.baidu.com/" />
  <link rel="dns-prefetch" href="//www.google-analytics.com" />
  ';
}
add_action( 'wp_head', 'wp_dns_prefetch');

十三、禁用無用的功能

WordPress 有一些不必要的功能,如果您不需要這些功能,那麼可以禁用掉,這樣就能節省伺服器資源。

例如:文章修訂版本、自動保存、Emoji 表情、Pingback 和 Trackback、XML-RPC、REST API 等等。

您可以使用插件 Clearfy 或者 WP Disable 來禁用這些功能。

十四、避免安裝過多插件

為什麼那麼多人喜歡使用 WordPress,其中一個原因就是有大量的插件,可以實現各種各樣的功能。但是由於插件作者的水平不一,導致插件的性能各異,還有兼容性等問題,所以安裝過多的插件反而會拖慢系統。有些人覺得 WordPress 臃腫,其中一個原因就是不當使用插件。

插件是要消耗伺服器資源的,每多安裝一個插件就代表多消耗一份資源,所以務必要控制插件的數量。如果一個插件能實現多個功能,就不要安裝一個獨立功能的插件。

此外,如果兩個插件功能相仿,要儘量使用安裝量大的插件,這表明插件更實用,而且兼容性更好。安裝量過低的插件儘量不要使用,安裝後導致系統崩潰的事情並不少見。

十五、有選擇性的禁用插件

每個插件都有相應的一些功能,但是並非網站上所有頁面都需要使用到這些功能。實際情況卻是,很多插件在安裝後,都會在網站的每一個頁面中加載自己的 js 和 css 文件,這樣頁面中就加載了很多沒必要的資源,白白浪費帶寬資源。

Asset Cleanup 非常適合于禁用在特定頁面上不使用的插件。特別是如果您安裝了許多插件,或者僅安裝了幾個資源密集型插件,但是僅需將它們加載到所使用的頁面上。這意味著整個 WordPress 網站可以加載得更快。類似的插件還有 Plugin Organizer

利用 Chrome 的開發者工具,在 Network 中搜索「plugins」,您就能看到頁面中加載了哪些插件的資源。檢查網站上各種類型的頁面,特別是文章頁面,如果有哪些 js 或 css 是當前頁面沒有使用到的,那麼就用 Asset Cleanup 禁用掉吧。

十六、限制搜尋引擎爬蟲

搜尋引擎爬蟲是消耗伺服器資源的大戶,特別是一些勤快的爬蟲,例如 Googlebot。此外還有一些專門四處抓取網站數據的網絡爬蟲,例如 AhrefsBot。為了避免伺服器資源浪費,我們很有必要對這些爬蟲做些限制,甚至禁止訪問。

Wordfence 是一款非常強大的 WordPress 安全插件,推薦所有人安裝使用。在 WordFence 的「Tools → Live Traffic」中您可以實時查看所有訪問者信息,包括真實訪客、爬蟲、網絡攻擊等等。

找到那些您不希望抓取您網站數據的爬蟲,然後在 robots.txt 中禁止掉。例如:

User-agent: AhrefsBot
Disallow: / 
User-agent: MJ12bot
Disallow: /
User-agent: YandexBot
Disallow: /

有些爬蟲可能不遵守 robots 協議,那麼您可以在「Firewall → Blocking」中設置規則來禁止訪問。

此外,Wordfence 還有一項 Rate Limiting 功能,可以限制訪問頻率,及禁止虛假 Google 爬蟲。大家可以根據自己的實際情況,限制真實人類或蜘蛛爬蟲的訪問頻率。

十七、限制文章修訂版本

在您編輯文章的過程中,每保存一次就會增加一個文章修訂版本。日積月累下,這些文章修訂版本的數量將達到一個恐怖的數量,實際上我們並不需要如此多的修訂版本,這只會增加資料庫的體積,降低資料庫的性能。

有很多插件都有限制文章修訂版本的功能,例如前面提到的 Clearfy。但是其實我們只需在網站根目錄 wp-config.php 文件中增加一行代碼就能解決問題:

define('WP_POST_REVISIONS', 3); //保存 3 個修訂版本
define('WP_POST_REVISIONS', false); //不保存任何修訂版本