提升WordPress網站性能的實用指南
關鍵要點:
WordPress佔據全球前一百萬網站的近50%的CMS市場份額(數據來自Builtwith.com),在電商領域,WooCommerce的佔比也達到33%。儘管WordPress有時會被詬病臃腫、資源消耗大,數據模型也有不足之處,但其普及程度毋庸置疑。
WordPress的易用性和低門檻使其得以廣泛應用。它易於設置,幾乎不需要技術知識。每月只需幾美元就能找到WordPress主機,基本設置只需半小時點擊即可完成。免費的WordPress主題和包含所見即所得頁面構建器的主題比比皆是。
很多人看不起WordPress,但不可否認的是,WordPress推動了互聯網和PHP的發展,許多互聯網專業人士也受益於WordPress的易學性而開啟了職業生涯。
然而,這種易用性也帶來了代價。許多打著WordPress旗號的網站並非由專業人士打造,而是由價格低廉的開發者完成的,性能和外觀往往被忽視。專業的外觀和性能不應該事後補救,而應該在網站規劃階段就予以考慮。
知名英國二手車經銷商Ling's Cars嘗試了一種獨特的營銷方式,除非你非常清楚自己在做什麼,否則請不要模仿。
一切從主機選擇開始
新手通常會選擇低成本的產品,並配備許多初學者友好的功能。考慮到一些大型行業參與者的不正當商業行為,以及客戶對網站遷移專業人員的需求,網站設置的這一部分需要認真對待。
我們可以將WordPress主機供應商分為幾個等級:
對於託管式主機,需要注意的是服務器堆棧、CDN集成和SSD存儲。像A2這樣的保證資源是一個很大的優勢。接下來要尋找的是SSH訪問權限。精通技術的用戶可能會受益於WP-CLI的可用性。
選擇VPS時,需要注意的是XEN或KVM虛擬化優於OpenVZ,因為它可以減輕資源的過度銷售,有助於保證你購買的資源確實是你的。它還提供了更好的安全性。
Easy Engine是一款軟件,可以將你的整個VPS/WordPress安裝變成一個一小時的工作。
關於服務器堆棧,如果追求性能,Nginx優於Apache,PHP 7是必須的。如果我們真的需要Apache,使用Nginx作為反向代理是一個優勢,但這設置可能會比較複雜。
測試表明PHP 7比之前的版本有很大的優勢。根據fasthosts.co.uk:
與PHP 5.6相比,WordPress 4.1在PHP 7上每秒執行的請求增加了95%。
選擇主機時,請注意一些臭名昭著的提供商的負面體驗。
軟件注意事項
通常會減慢WordPress網站速度的是龐大的前端,其中包含大量的靜態資源和數據庫查詢。這些問題源於主題的選擇(及其頁面構建器、大型滑塊等),這不僅會由於許多請求和整體大小而減慢初始加載速度,而且還會由於大量的JavaScript和需要渲染的內容而減慢瀏覽器速度,使其無響應。
這裡的黃金法則是:除非有充分的理由,否則不要使用它。
這可能聽起來像來自荷馬·辛普森口中的一條規則,但如果你可以跳過任何花里胡哨的功能,那就跳過吧。要保守。如果你必須添加一些閃亮的功能或JS視覺效果,總是優先選擇那些盡可能專門為你的確切需求量身定制和編碼的。如果你是熟練的編碼人員,並且項目證明了這項工作的合理性,請記住簡潔性自己編寫代碼。
檢查所有你的網站不可或缺的插件——並刪除其他插件。
最重要的是:在你開始修剪之前備份你的網站!
如果你使用的是一個你使用了許多自定義帖子或字段的主題,請注意,很多這些都會減慢你的數據庫查詢速度。保持你的數據模型盡可能簡單,如果不是,請考慮WordPress最初的用途是一個博客引擎。如果你需要更多功能,你可能需要考慮一些現有的MVC Web框架,這些框架將使你能夠更好地控制你的數據模型和數據庫的選擇。
在WordPress中,我們可以通過使用自定義帖子類型、自定義分類法和自定義字段來構建豐富的自定義數據模型,但要注意性能和復雜性的成本。
如果你了解代碼,請檢查你的主題以查找不必要的數據庫查詢。每次單獨的數據庫訪問都會在你的TTFB中花費寶貴的毫秒,以及你的服務器內存的兆字節。記住,二級循環可能代價高昂——因此在使用顯示額外帖子的部件和小部件(例如滑塊或部件區域)時要小心。如果你必須使用它們,請考慮在一個查詢中獲取所有帖子,否則可能會減慢你的網站速度。對於那些不想從頭開始編碼的人,有一個GitHub存儲庫。
使用自定義字段根據某些條件獲取帖子可能是一個開發複雜WordPress功能的強大工具。這是一個元查詢的示例,在這裡你可以找到關於其成本的一些詳細說明。總結:帖子元數據並非為過濾而構建,分類法是。
get_post_meta是一個通常用於獲取自定義字段的函數,它可以只使用帖子ID作為參數來調用,在這種情況下,它會在一個數組中獲取所有帖子的元數據字段,或者它可以將自定義字段的名稱作為第二個參數,在這種情況下,它只返回指定的字段。
如果在一個頁面或請求上多次對某個帖子使用get_post_meta()(對於多個自定義字段),請注意這不會產生額外成本,因為第一次調用此函數時,所有帖子元數據都會被緩存。
在網站的生命週期中安裝和刪除各種插件以及更改不同的主題,通常會使你的數據庫充滿了許多不需要的數據。完全有可能發現——在檢查為什麼WordPress網站運行緩慢或由於服務器內存耗盡而無法加載時——數據庫已經增長到數百兆字節甚至超過千兆字節,沒有任何內容可以解釋它。
wp-options是許多孤立數據通常遺留的地方。這包括但不限於各種瞬態數據(這篇文章警告了關於插件中刪除瞬態數據的最佳實踐)。瞬態數據是一種緩存形式,但與任何其他緩存一樣,如果使用不當,它可能會弊大於利。如果你的服務器環境提供它,wp-cli有一個專門用於瞬態數據管理的命令集,包括刪除。如果沒有,WordPress插件庫中有一些插件可以刪除過期的瞬態數據,但它們提供的控制較少。
如果刪除瞬態數據仍然使我們的數據庫膨脹而沒有任何實際原因,WP-Sweep是一個優秀的免費工具,可以完成清理數據庫的工作。另一個需要考慮的是WP Optimize。
在進行任何類型的數據庫清理之前,強烈建議你備份你的數據庫!
一個非常方便的插件,用於分析整個WordPress請求生命週期,是Debug Objects。它提供了對所有瞬態數據、短代碼、類、樣式和腳本、加載的模板、數據庫查詢和鉤子的檢查。
確保了一個合理的、面向性能的設置——提前考慮我們的服務器堆棧,消除主題選擇和插件和小部件過載可能造成的膨脹——我們應該嘗試識別瓶頸。
如果我們在Pingdom Speed Test之類的工具中測試我們的網站,我們將獲得請求中加載的所有資源的瀑布圖:
這為我們提供了關於請求-響應生命週期的詳細信息,我們可以分析這些詳細信息以查找瓶頸。例如:
為了獲得更廣泛的測試和指導,以改進網站,有一個名為webcoach的小型命令行實用程序。在一個安裝了NodeJS和npm的環境中(如Homestead Improved),安裝它很簡單:
<code>npm install webcoach -g</code>
安裝後,我們可以獲得關於如何改進網站各個方面的詳細見解和建議,包括性能:
緩存
緩存在管理WordPress網站時可以發揮重要作用。有幾個層次和可能的緩存方式。
頁面緩存是Web應用程序的整個HTML輸出的緩存。
如果可以,我們應該首先嘗試測試服務器級別的解決方案,例如NGINX緩存或Varnish,或者Kinsta、SiteGround等託管主機供應商提供的緩存系統。
如果這並沒有像我們希望的那樣有幫助,我們可能需要考慮使用WP Super Cache、WP Fastest Cache或GitHub上經過改進的W3 Total Cache等插件。所有這些都可以提高性能,但通常需要一些實驗。配置不當的緩存解決方案實際上會損害網站的性能。例如,W3TC——至少在改進之前——被認為可能是最好的免費緩存解決方案,可以創造奇蹟……當它工作時。當它不工作時,它可能會使你的網站脫機。
WP Rocket被認為可能是最受好評的高級緩存解決方案。
頁面緩存可以大幅提高性能,從RAM中提供整個網站,但請注意,如果你有一個帶有購物車或依賴於cookie或個性化前端的動態網站,它可能會帶來並發症。它可以為一個用戶提供另一個用戶的UI部分,因此通常需要在投入生產之前進行測試。這尤其適用於非託管服務器上的解決方案,例如Varnish或Cloudflare頁面緩存。
當動態的、依賴於cookie的網站難以使用全頁面方法進行緩存,或者當我們緩存Ajax請求時,片段緩存是一個需要考慮的解決方案。這裡有一個很好的介紹。
對象緩存意味著編譯和存儲內存中所有數據庫查詢和PHP對象。一些緩存插件試圖為我們管理對象緩存後端。使用後端通常是APCu、Memcached和Redis。它們需要安裝在服務器上。
為了更深入地測試我們的PHP代碼和對象緩存的性能,一個有價值的工具(需要shell訪問權限和安裝wp-cli)是profile命令。我們可以使用以下命令安裝它:
<code>npm install webcoach -g</code>
或
<code>wp package install git@github.com:wp-cli/profile-command.git</code>
(根據安裝情況,你可能需要添加--allow-root標誌。)
然後我們可以分析整個加載週期,或者深入到特定的鉤子、文件和類、它們的加載時間和緩存比率。
瀏覽器緩存意味著強制訪問者的瀏覽器將其靜態文件保存在其緩存中,因此他們不需要在重複訪問時從我們的服務器獲取這些文件。這裡使用cache-control和expires標頭。緩存插件通常管理瀏覽器緩存和設置標頭。 Technumero製作了一個更深入的指南。
靜態文件
靜態文件是圖像、樣式表、JS代碼、字體、媒體文件等。我們應該確保我們壓縮它們,並且如果可能的話,我們正在利用HTTP/2來提供這些文件。如果我們的託管式主機不支持HTTP/2,或者將我們的非託管VPS遷移到HTTP/2超出我們的能力範圍,最簡單的方法是將CDN集成到我們的堆棧中。 CDN從最接近我們受眾的數據中心提供我們的靜態文件。這減少了延遲,通常意味著利用它們高度調整的基礎設施。
Autooptimize是一個可以幫助操作我們的靜態資產並減少請求數量的插件,它可以連接JS和样式表文件,縮小它們,從而縮小頁面輸出。
關於媒體文件,我們應該考慮壓縮/編碼我們的視頻以減小它們的大小,並通過YouTube等提供商提供它們,以減少對我們服務器的壓力。像Amazon S3這樣的雲存儲提供商是另一個不錯的選擇。視頻託管不在本文的討論範圍之內,但WPMUDEV製作了一個關於此主題的實用指南。
關於圖像,這些圖像通常對於Web來說太大。有時,唯一能夠讓我們的服務器正常運行的解決方案(這可能需要很長時間)是通過shell進行批量壓縮。 Linux上的Imagemagick有一個有用的convert工具,允許我們批量壓縮我們的圖像。此示例遞歸地對文件夾中的所有JPG進行此操作,將JPEG質量降低到80%,以及其他一些小的增強功能,並調整圖像大小(它應該是自解釋的):
<code>npm install webcoach -g</code>
WP Bullet有兩個優秀的指南,用於批量壓縮JPG和PNG文件。
除此之外,還有Imagify服務和相應的WordPress插件來減小圖像大小,EWWW圖像優化器等等……
其他隨機提示
<code>wp package install git@github.com:wp-cli/profile-command.git</code>
在Apache中:
<code>wp package install wp-cli/profile-command</code>
像iThemes Security、WPS Hide login等插件可以幫助解決這個問題,並更改我們的登錄頁面URL。
如果你受到暴力攻擊,並且沒有受到像Cloudflare這樣的CDN或託管主機的保護,請考慮使用像fail2ban這樣的防火牆(無論是否受到攻擊,你都應該安裝防火牆)。
綜上所述,需要再次警告:在你對網站進行任何更改之前,請備份它!
結論
我希望這篇WordPress優化技巧的彙編能派上用場。隨著網站規模的增長,這些技巧越來越難以追溯地應用。這就是為什麼最好儘早開始,並努力獲得最大效果:在啟動之前應用盡可能多的這些技術,你不僅將擁有一個順利的啟動,而且從第一天起就擁有一個高性能的應用程序——這對於所有新用戶來說肯定是一種極好的體驗。
確保你也查看SitePoint的PWA指南。從第一天起就盡可能使你的WP網站成為PWA,這將幫助用戶將其安裝在其設備的主屏幕上,為重複訪問做好準備。
WordPress性能優化的常見問題解答
有幾個插件可以顯著提高WordPress網站的性能。其中一些最好的包括WP Rocket、W3 Total Cache和WP Super Cache。這些插件提供頁面緩存、對象緩存和GZIP壓縮等功能,可以幫助加快網站速度。此外,像Imagify這樣的插件可以優化你的圖像,減小它們的大小而不會影響質量,這也可以提高加載時間。
內容交付網絡(CDN)可以通過在世界各地存儲網站內容的副本來顯著提高WordPress網站的性能。當用戶訪問你的網站時,CDN會從最接近他們的服務器交付內容,從而減少內容加載所需的時間。這可以顯著提高網站的速度,尤其對於遠離你的主服務器的用戶。
優化WordPress數據庫可以顯著提高網站的性能。這可以通過定期清理數據庫、刪除不必要的數據和優化數據庫表來實現。像WP-Optimize這樣的插件可以自動化此過程,使維護乾淨高效的數據庫更容易。
圖像優化可以通過減小圖像的大小而不會影響其質量來顯著提高WordPress網站的性能。這可以通過壓縮圖像、使用正確的圖像格式和將圖像調整到合適的尺寸來實現。像Imagify這樣的插件可以自動化此過程,使優化圖像更容易。
減少服務器響應時間可以顯著提高WordPress網站的性能。這可以通過優化服務器配置、使用高質量的主機提供商和實施緩存解決方案來實現。此外,減少網站向服務器發出的請求數量也可以提高服務器響應時間。
縮小CSS和JavaScript文件可以通過減小這些文件的大小來顯著提高WordPress網站的性能。此過程包括從代碼中刪除不必要的字符,如空格和註釋,而不會改變其功能。像Autoptimize這樣的插件可以自動化此過程,使縮小文件更容易。
優化WordPress網站以適應移動設備可以顯著提高網站在這些設備上的性能。這可以通過實施響應式設計、優化圖像以適應移動設備和使用移動友好的主題來實現。此外,像WPtouch這樣的插件可以幫助你創建移動友好的網站版本。
延遲加載可以通過僅在用戶屏幕上可見時加載圖像和其他內容來顯著提高WordPress網站的性能。這可以減少頁面的初始加載時間,提高網站的速度。像Lazy Load by WP Rocket這樣的插件可以自動化此過程,使在你的網站上實施延遲加載更容易。
GZIP壓縮可以通過減小文件的大小來顯著提高WordPress網站的性能。此過程包括在文件發送到用戶瀏覽器之前壓縮文件,從而減少需要傳輸的數據量。這可以顯著提高網站的加載時間。像Check and Enable GZIP compression這樣的插件可以自動化此過程,使在你的網站上實施GZIP壓縮更容易。
監控WordPress網站的性能可以幫助你識別可能減慢網站速度的任何問題。這可以使用Google PageSpeed Insights、GTmetrix和Pingdom等工具來完成。這些工具可以為你提供有關網站性能的詳細信息,包括加載時間、頁面大小和請求數量。
以上是WordPress性能優化的完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!