WordPress性能優化的完整指南
提升WordPress網站性能的實用指南
關鍵要點:
- 選擇優質主機: 高性能主機對網站速度至關重要。託管式WordPress主機和VPS方案能提供更好的控制和效率。
- 精簡主題和插件: 避免臃腫的主題和插件,不必要的特性會降低網站速度,影響用戶體驗。
- 實施緩存策略: 頁面緩存和對象緩存能減少服務器負載,加快內容交付速度。
- 定期優化數據庫: 刪除冗餘數據,優化數據庫操作,確保快速查詢響應。
- 使用CDN: CDN能更快地為全球用戶提供靜態文件,提升網站全球性能。
- 壓縮和優化圖片及靜態文件: 減少加載時間,考慮使用延遲加載技術。
WordPress佔據全球前一百萬網站的近50%的CMS市場份額(數據來自Builtwith.com),在電商領域,WooCommerce的佔比也達到33%。儘管WordPress有時會被詬病臃腫、資源消耗大,數據模型也有不足之處,但其普及程度毋庸置疑。
WordPress的易用性和低門檻使其得以廣泛應用。它易於設置,幾乎不需要技術知識。每月只需幾美元就能找到WordPress主機,基本設置只需半小時點擊即可完成。免費的WordPress主題和包含所見即所得頁面構建器的主題比比皆是。
很多人看不起WordPress,但不可否認的是,WordPress推動了互聯網和PHP的發展,許多互聯網專業人士也受益於WordPress的易學性而開啟了職業生涯。
然而,這種易用性也帶來了代價。許多打著WordPress旗號的網站並非由專業人士打造,而是由價格低廉的開發者完成的,性能和外觀往往被忽視。專業的外觀和性能不應該事後補救,而應該在網站規劃階段就予以考慮。
知名英國二手車經銷商Ling's Cars嘗試了一種獨特的營銷方式,除非你非常清楚自己在做什麼,否則請不要模仿。
一切從主機選擇開始
新手通常會選擇低成本的產品,並配備許多初學者友好的功能。考慮到一些大型行業參與者的不正當商業行為,以及客戶對網站遷移專業人員的需求,網站設置的這一部分需要認真對待。
我們可以將WordPress主機供應商分為幾個等級:
- 高端: Kinsta等專門提供WordPress託管服務的供應商,其計劃起價為每月100美元,甚至更高端的託管服務如Automattic的WordPress VIP,雖然值得信賴,但對許多網站所有者來說可能價格過高。
- 中端: Flywheel、A2 Hosting、SiteGround和Pantheon等被認為是可靠且注重性能的供應商,它們提供可接受的速度和託管服務,適合那些更注重價格的客戶。用戶在這裡可能會得到較少的幫助,但這些服務通常在可靠的設置、價格和高級用戶選項之間取得了不錯的平衡。此外還有Cloudways,它介於VPS和託管主機之間。歐洲用戶可以考慮Pilvia,因為它提供高性能的服務器堆棧且價格相當實惠。
- 低端: 對於那些不害怕命令行的人,可以選擇Digital Ocean、Vultr、Linode、亞馬遜的Lightsail、歐洲的Hetzner和OVH等VPS和專用服務器供應商。 Hetzner是一家德國供應商,以其提供的優質物理服務器而聞名,價格略高於虛擬服務器,而OVH則提供非常具有成本效益的虛擬服務器。對於注重價格的用戶,OVH在歐洲和加拿大的子公司Kimsufi也提供廉價的物理專用服務器,Host US則提供非常實惠的虛擬服務器。
對於託管式主機,需要注意的是服務器堆棧、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之類的工具中測試我們的網站,我們將獲得請求中加載的所有資源的瀑布圖:
這為我們提供了關於請求-響應生命週期的詳細信息,我們可以分析這些詳細信息以查找瓶頸。例如:
- 如果上面的粉色DNS時間過長,可能意味著我們應該考慮更長時間地緩存我們的DNS記錄。這是通過增加我們域名管理/註冊商儀表板中的TTL設置來完成的。
- 如果SSL部分花費的時間過長,我們可能需要考慮啟用HTTP/2以受益於ALPN,調整我們的cache-control標頭,最後切換到CDN服務。 “簡而言之的Web性能:HTTP/2、CDN和瀏覽器緩存”是一篇關於此主題的詳盡文章,KeyCDN的“分析HTTPS性能開銷”也是如此。
- 連接、發送和接收部分通常取決於網絡延遲,因此可以通過靠近目標受眾的主機、確保主機具有快速上行鏈路以及使用CDN來改進這些部分。對於這些項目,你可能也需要考慮一個ping工具(不要與上面提到的Pingdom工具混淆),以確保你的服務器能夠響應。
- 等待部分——瀑布圖中的黃色部分——是你的服務器基礎設施生成或返回請求的網站所花費的時間。如果這部分花費的時間過長,你可能需要回到我們之前關於優化服務器、WordPress安裝和數據庫堆棧的主題。或者你可以考慮各種層次的緩存。
為了獲得更廣泛的測試和指導,以改進網站,有一個名為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圖像優化器等等……
其他隨機提示
- 內存: 確保你的安裝有足夠的內存。
- XML-RPC和登錄頁面: XML-RPC和登錄頁面經常遭受自動的、腳本化的暴力攻擊——即使它不是一個大目標。即使沒有闖入,它們也會浪費CPU週期。我們應該嘗試在服務器級別阻止它們,在我們WordPress安裝加載之前。如果我們不需要訪問xmlrpc.php,我們可以在nginx上的虛擬主機塊中放入這段代碼:
<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心跳: 當WordPress儀表板打開時輪詢服務器可能會減慢你的服務器速度,並使你的儀表板無響應。特別是如果它在多個瀏覽器選項卡中或由多個用戶打開。 HeartBeat插件可以幫助解決這個問題。
- MAX_INPUT_VARS: 當保存帶有大量元字段的帖子或帶有WooCommerce的可變產品時,我們可能會達到允許的最大請求變量數的限制(由複雜的WooCommerce產品發送的變量可能達到數千個)。這可能會使你的服務器崩潰。以下是如何修復它。
- 如果你使用的是一個大型數據庫的WordPress安裝——尤其是一個WooCommerce安裝——並且開始出現你無法解決的速度問題,請考慮使用ElasticPress。有些人對此很滿意。
- 如果你使用WordFence,請確保關閉Live View功能。它甚至可以使具有幾GB內存的VPS停止運行。
- 如果你正在記錄對你的網站的訪問——尤其是在你的wp-content目錄中的debug.log中——請注意其大小。它可以增長到千兆字節級別並使你的服務器崩潰。
- 如果你在服務器/主機上發生系統崩潰,核心轉儲將填滿你的存儲空間。請有人分析這些崩潰的原因,然後刪除這些文件。你將通過看起來像core.XXXXXX的模式識別它們。
綜上所述,需要再次警告:在你對網站進行任何更改之前,請備份它!
結論
我希望這篇WordPress優化技巧的彙編能派上用場。隨著網站規模的增長,這些技巧越來越難以追溯地應用。這就是為什麼最好儘早開始,並努力獲得最大效果:在啟動之前應用盡可能多的這些技術,你不僅將擁有一個順利的啟動,而且從第一天起就擁有一個高性能的應用程序——這對於所有新用戶來說肯定是一種極好的體驗。
確保你也查看SitePoint的PWA指南。從第一天起就盡可能使你的WP網站成為PWA,這將幫助用戶將其安裝在其設備的主屏幕上,為重複訪問做好準備。
WordPress性能優化的常見問題解答
哪些插件最適合優化WordPress性能?
有幾個插件可以顯著提高WordPress網站的性能。其中一些最好的包括WP Rocket、W3 Total Cache和WP Super Cache。這些插件提供頁面緩存、對象緩存和GZIP壓縮等功能,可以幫助加快網站速度。此外,像Imagify這樣的插件可以優化你的圖像,減小它們的大小而不會影響質量,這也可以提高加載時間。
CDN如何提高WordPress性能?
內容交付網絡(CDN)可以通過在世界各地存儲網站內容的副本來顯著提高WordPress網站的性能。當用戶訪問你的網站時,CDN會從最接近他們的服務器交付內容,從而減少內容加載所需的時間。這可以顯著提高網站的速度,尤其對於遠離你的主服務器的用戶。
如何優化我的WordPress數據庫?
優化WordPress數據庫可以顯著提高網站的性能。這可以通過定期清理數據庫、刪除不必要的數據和優化數據庫表來實現。像WP-Optimize這樣的插件可以自動化此過程,使維護乾淨高效的數據庫更容易。
圖像優化如何提高WordPress性能?
圖像優化可以通過減小圖像的大小而不會影響其質量來顯著提高WordPress網站的性能。這可以通過壓縮圖像、使用正確的圖像格式和將圖像調整到合適的尺寸來實現。像Imagify這樣的插件可以自動化此過程,使優化圖像更容易。
如何減少WordPress中的服務器響應時間?
減少服務器響應時間可以顯著提高WordPress網站的性能。這可以通過優化服務器配置、使用高質量的主機提供商和實施緩存解決方案來實現。此外,減少網站向服務器發出的請求數量也可以提高服務器響應時間。
縮小CSS和JavaScript如何提高WordPress性能?
縮小CSS和JavaScript文件可以通過減小這些文件的大小來顯著提高WordPress網站的性能。此過程包括從代碼中刪除不必要的字符,如空格和註釋,而不會改變其功能。像Autoptimize這樣的插件可以自動化此過程,使縮小文件更容易。
如何優化我的WordPress網站以適應移動設備?
優化WordPress網站以適應移動設備可以顯著提高網站在這些設備上的性能。這可以通過實施響應式設計、優化圖像以適應移動設備和使用移動友好的主題來實現。此外,像WPtouch這樣的插件可以幫助你創建移動友好的網站版本。
延遲加載如何提高WordPress性能?
延遲加載可以通過僅在用戶屏幕上可見時加載圖像和其他內容來顯著提高WordPress網站的性能。這可以減少頁面的初始加載時間,提高網站的速度。像Lazy Load by WP Rocket這樣的插件可以自動化此過程,使在你的網站上實施延遲加載更容易。
如何使用GZIP壓縮來提高WordPress性能?
GZIP壓縮可以通過減小文件的大小來顯著提高WordPress網站的性能。此過程包括在文件發送到用戶瀏覽器之前壓縮文件,從而減少需要傳輸的數據量。這可以顯著提高網站的加載時間。像Check and Enable GZIP compression這樣的插件可以自動化此過程,使在你的網站上實施GZIP壓縮更容易。
如何監控我的WordPress網站的性能?
監控WordPress網站的性能可以幫助你識別可能減慢網站速度的任何問題。這可以使用Google PageSpeed Insights、GTmetrix和Pingdom等工具來完成。這些工具可以為你提供有關網站性能的詳細信息,包括加載時間、頁面大小和請求數量。
以上是WordPress性能優化的完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。
